多重背包求最优解问题。
代码如下:
<span style="font-size:18px;">#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int V;
long long sum[110000];
int w[50];
void Init()
{
memset(sum,0,sizeof(sum));
sum[0]=1;
}
void solve()
{
for(int i=1;i<=21;i++)
for(int j=w[i];j<=V;j++)
sum[j]+=sum[j-w[i]];
printf("%lld\n",sum[V]);
}
int main()
{
for(int i=1;i<=21;i++)
w[i]=i*i*i;
while(scanf("%d",&V)!=EOF)
{
Init();
solve();
}
return 0;
}</span>