思路: 完全背包+高精度
分析:
1 题目是裸的完全背包,但是要注意的一个地方是要用高精度
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N = 110; const int MAXN = 1010; int sum , n , v[N]; int dp[MAXN][N]; void init(){ for(int i = 1 ; i < N ; i++) v[i] = i; } void add(int x , int y){ for(int i = 0 ; i < N ; i++){ dp[x][i] += dp[y][i]; dp[x][i+1] += dp[x][i]/10; dp[x][i] %= 10; } } void solve(){ memset(dp , 0 , sizeof(dp)); dp[0][0] = 1; for(int i = 1 ; i <= n ; i++) for(int j = v[i] ; j <= sum ; j++) add(j , j-v[i]); int pos = N-1; while(!dp[sum][pos]) pos--; for(; pos >= 0 ; pos--) printf("%d" , dp[sum][pos]); puts(""); } int main(){ init(); while(scanf("%d%d", &sum , &n) != EOF) solve(); return 0; }