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;
}

posted @ 2024-10-04 09:23  p7gab  阅读(20)  评论(0)    收藏  举报  来源