POJ3181 Dollar Dayz
来源:互联网 发布:pc端护眼软件 编辑:程序博客网 时间:2024/04/30 21:50
/*2016年8月2日19:53:39 题目大意:输入n,和k,问将n用1到k这k个数字进行拆分,有多少种拆分方法。例如:n=5,k=3 则有n=3+2,n=3+1+1,n=2+1+1+1,n=2+2+1,n=1+1+1+1+1这5种拆分方法思路详见 代码n只要大一点就会爆longlong 所以要用大数但最大数字有33位 ( 网上说的 所以可以用两个long long 分开表示一个表示后18位 另一个表示前面的位 */#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <queue>#include <vector>#include <cmath>#include <stack>#include <map>#include <set>#define pi acos(-1)#define LL long long#define INF 0x3f3f3f3fusing namespace std;const int maxn = 1e5 + 5;const LL mod = 1e18;LL dp[1005], a[1005];int main(void){//freopen("C:\\Users\\wave\\Desktop\\NULL.exe\\NULL\\in.txt","r", stdin); int i, j, n, k; LL tmp; while (cin >> n >> k) { memset(dp, 0, sizeof(dp)); memset(a, 0, sizeof(a)); dp[0] = 1; for (i = 1; i <= k; i++){ // 当i = 1 表示只用硬币1来组成 j的方法数 for (j = i; j <= n; j++){// 当i = 2 表示只用硬币1和2来组成 j的方法数 a[j] = a[j] + a[j-i] + (dp[j] + dp[j-i]) / mod;// 当i = 3 表示只用硬币1和2和3来组成 j的方法数 dp[j] = (dp[j] + dp[j-i]) % mod;/// 等等等等。。。。 所以就 dp[j] += dp[j-i] } } if (a[n]) cout << a[n]; cout << dp[n] << endl; } return 0;}
0 0
- poj3181 Dollar Dayz dp
- POJ3181 Dollar Dayz
- poj3181 Dollar Dayz
- 【POJ3181】【Dollar Dayz】
- 【POJ3181】【Dollar Dayz】
- POJ3181--Dollar Dayz
- POJ3181 Dollar Dayz
- POJ3181 Dollar Dayz(DP)
- POJ3181 Dollar Dayz
- POJ3181 Dollar Dayz
- POJ3181-Dollar Dayz
- POJ3181:Dollar Dayz(完全背包)
- poj3181 Dollar Dayz (DP+大数)
- POJ3181 Dollar Dayz 动态规划,多重背包
- POJ3181 Dollar Dayz 【母函数】+【高精度】
- POJ3181-Dollar Dayz-完全背包+高精度
- 【转】POJ3181——Dollar Dayz(完全背包优化)
- 挑战练习题2.3动态规划 poj3181 Dollar Dayz 完全背包
- buddy内存分配算法浅析
- POJ 1742 Coins
- Android 面试总结
- HDU 1281 棋盘游戏-二分匹配
- Java正则表达式Matcher.group(int group)相关类解析
- POJ3181 Dollar Dayz
- 二叉树
- POJ 2253 Frogger
- POJ2993&&POJ2996
- 历史上的今天
- 正式开始的第一篇博客
- 【linux】Can't connect to MySQL server on 'XXX' (13)问题解决方式
- LINUX ROOT
- VMWare占用443端口,导致httpd服务器无法正常启动