题目大意:
在10000以内的正整数中,有些数可以开3次方,给定一个正整数,可以由一些能够开3次方的数组成,求出共有几种组成方式。
解题思路:
该题和硬币找零的题目相似,可以参考UVA Dollars(147)。先算出所有能够开3次方的数,这些数相当于可以用的硬币,后面的求法就和UVA Dollars(147)一样了。状态转移方程为:
dp[n] += dp[n-v[m]];
其中,dp[n] 表示组成 n 有几种方法,v[m] 存储所有能够开3次方的数。
代码:
#include <iostream> #include <cstring> #include <vector> #include <algorithm> using namespace std; long long dp[10010]; int main() { int paid, cube = 1, k = 1, len; vector<int> v; //先求出10000以内能够开3次方的数 do { v.push_back(cube); k++; cube = k * k * k; }while( cube <= 10000 ); len = v.size(); while( cin>>paid ) { memset( dp, 0, sizeof( dp ) ); dp[0] = 1; for( int m = 0; m < len; m++ ) { for( int n = v[m]; n <= paid; n++ ) { dp[n] += dp[n-v[m]]; //如果 n-v[m] 能够由那些开3次方的数组成,那么 n 也能由开3次方的数组成,只要不断进行累加,就可以算出 n 能有几种组成方式。 } } cout<<dp[paid]<<endl; } return 0; }
相关推荐
"ingenious"和"ingenuous"在形容人时,前者指机智或精巧,如"ingenious inventions",后者表示天真或坦诚,如"ingenuous children"。 "intense"和"intensive"都表示强烈或深度,"intense"常用来描述程度高或强烈的...
例如,"candid" 和 "ingenuous","latent" 和 "dormant","inimical" 和 "hostile"。解决此类问题需要考生拥有扎实的词汇基础和清晰的解题思路,通常需要先对选项进行分类,然后基于题目内容进行判断。 **解题策略*...
- **ingenuous**:天真的,直率的 - **empirical**:经验主义的 - **objective**:客观的 - **indignant**:愤怒的 - **turbulent**:动荡的,混乱的 - **tragic**:悲剧的 - **vulnerable**:易受伤害的 - ...
在描述人物性格时,**ingenious**(机灵的)和**ingenuous**(直率的)能够精确刻画人物特质。 ### 结论 综上所述,掌握形近词不仅能够帮助考生避免常见的语法错误,还能提升语言表达的准确性和丰富性。通过系统...
- ingenuous (天真的):纯真无邪,未经世故的。 - ingenious (独特的):有创新或巧妙的构思。 - practicable (行得通的):实际可行的。 - practical (实际的):注重实际应用的。 - seasonal (季节的):与特定季节...