完全背包
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> using std::cin; using std::cout; using std::endl; int coin[]={1,8,27,64,125,216,343,512,729,1000,1331,1728,2197,2744,3375,4096,4913,5832,6859,8000,9261}; long long dp[10010][23]; int n; long long dfs(int pre, int nx) { if(nx==0) return 1; if(dp[nx][pre]!=-1) return dp[nx][pre]; long long sum=0; for(int i=pre; i<21; i++) { if(nx>=coin[i]) sum+=dfs(i,nx-coin[i]); } dp[nx][pre]=sum; return sum; } int main() { memset(dp, -1, sizeof(dp)); while(scanf("%d",&n)==1) { cout << dfs(0,n) << endl; } return 0; }
浙公网安备 33010602011771号