HDU 1395
2014-02-21 21:47
190 查看
题意:给你1,4,9,16,25,,,17*17;类型的硬币,再给你个数n,问有多少种组合的硬币会等于n,每种类型的硬币有无限个;
整数差分,母函数....
G(x)=(1+x+x^2+x^3+x^4+.......)(1+x^4+x^8+x^12+......)(1+x^9+x^18+x^27+.....).........
整数差分,母函数....
G(x)=(1+x+x^2+x^3+x^4+.......)(1+x^4+x^8+x^12+......)(1+x^9+x^18+x^27+.....).........
#include<cstdio> #include<stdlib.h> #include<string.h> #include<string> //#include<map> #include<cmath> #include<iostream> #include <queue> #include <stack> #include<algorithm> #include<set> using namespace std; #define INF 1e8 #define inf -0x3f3f3f3f #define eps 1e-8 #define LL long long #define maxn 10 #define mol 100000007 const int _max = 10001; // c1是保存各项质量砝码可以组合的数目 // c2是中间量,保存没一次的情况 int c1[_max], c2[_max]; int main() { //int n,i,j,k; int nNum; // int i, j, k; while(cin >> nNum&&nNum) { for(i=0; i<=nNum; ++i) // ---- ① { c1[i] = 1; c2[i] = 0; } for(i=2; i<=17; ++i) // ----- ② { for(j=0; j<=nNum; ++j) // ----- ③ for(k=0; k+j<=nNum; k+=i*i) // ---- ④ { c2[j+k] += c1[j]; } for(j=0; j<=nNum; ++j) // ---- ⑤ { c1[j] = c2[j]; c2[j] = 0; } } cout << c1[nNum] << endl; } return 0; }
相关文章推荐
- oracle面试题目总结
- 解决点击MDI父窗体下拉菜单,子窗体重复出现的问题
- UML九种图之用例图
- socket通信简介
- 神奇的CSS形状
- USB设备驱动程序(二)
- Linux开发工具_4_Makefile入门(下)
- ubuntu忘记root密码解决
- JavaBean实现注册验证功能
- 穷竭搜索
- 分享做老师的幸福
- VC++常规错误之一:error LNK2019: 无法解析的外部符号 "public: void __thiscall
- 栈的应用uva673
- Mirantis Fuel调研
- C# 中的委托和事件
- Android中的context、activity、intent、service使用详解
- QTP\UFT11.5破解(恢复30天试用)
- 解决OpenKM启动失败的详细历程
- 百练 2754八皇后问题
- Surrounded Regions