UVA11137题解
简要题意
给定一个整数 \(n\),问把 \(n\) 表示成一些数的立方和的方案数,注意相同的数算一种方案。
解析
题中告诉我们,选的数小于 \(10000\),所以可以先打表将小于 \(10000\) 的完全立方数存一下。
之后我们不妨将每个数字 \(x\) 视作一个重量为 \(x^3\) 的物品,让物品正好填满背包。
这显然算是一个完全背包,之后就可以优化到一维。
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+3;
int n;
int c[21]= {1,8,27,64,125,216,343,512,729,1000,1331,1728,2197,2744,3375,4096,4913,5832,6859,8000,9261};
long long dp[maxn+2];
int main() {
dp[0]=1;
for(int i=0; i<21; i++)
for(int j=c[i]; j<10000; j++)
dp[j]+=dp[j-c[i]];
while(cin>>n)
cout<<dp[n]<<endl;
return 0;
}

浙公网安备 33010602011771号