http://poj.org/problem?id=3181

这个题目一开始就能看出来是个dp问题,但是我并没有一开始就看出来是一个完全背包为题,只是想着根据以前的方法,这个问题应该是可以找到规律的,但是,还是被坑了,这还是一个大数问题!

首先我膜拜一下hankcs大神的:

///

  1. #include <iostream>
  2. using namespace std;
  3. unsigned long long dp[100 + 16][1000 + 16]; // dp[i][j] := 用i种价格配出金额j的方案数
  4. ///SubMain//
  5. int main(int argc, char *argv[])
  6. {
  7. #ifndef ONLINE_JUDGE
  8. freopen("in.txt", "r", stdin);
  9. freopen("out.txt", "w", stdout);
  10. #endif
  11. int N, K;
  12. cin >> N >> K;
  13. dp[0][0] = 1;
  14. for (int i = 1; i <= K; ++i)
  15. {
  16. for (int k = 0; k <= N; k += i)
  17. {
  18. for (int j = N; j >= k; --j)
  19. {
  20. dp[i][j] += dp[i - 1][j - k];
  21. }
  22. }
  23. }
  24. cout << dp[K][N] << endl;
  25. #ifndef ONLINE_JUDGE
  26. fclose(stdin);
  27. fclose(stdout);
  28. system("out.txt");
  29. #endif
  30. return 0;
  31. }

  hancks的这个做法是用完全背包

  dp[i][j] = dp[i – 1][j] + dp[i – 1][j – i] + dp[i – 1][j – 2 * i] + … + dp[i – 1][0]

  由这个公式可以再递推:  

将j换成j – i有

dp[i][j – i] = dp[i – 1][j – i] + dp[i – 1][j – 2 * i] + … + dp[i – 1][0]

得出:if j >= i:

  dp[i][j] = dp[i-1][j] + dp[i][j-i];

  我的做法是一开始就推出了这个公式,因为不小心看出了这个规律

    i:1->4 ,j :1->5 dp[i][j]规律是这样的

    1 1 1 1 1

    1 2 2 3 3

    1 2 3 4 5

    1 2 3 4 6

    得出了j >= i : dp[i][j] = dp[i-1][j] + dp[i][j-i] 

    然而,这还是个大数问题,即使unsigned long long 都不行,开始一直没想通!

/*************************************************************************> File Name: DollarDayz_poj3181.cpp> Author: spzhao> Mail: spzhaol@163.com > Created Time: 2015年10月14日 星期三 11时13分22秒************************************************************************/#include<iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>#define mod 10000000000000000
using namespace std;const int N = 1005;
const int K = 105;
unsigned long long dp[100+16][1000+16][2];
int n,k;
void solve()
{for (int i = 1;i <= k;i++){for (int j = 1;j <= n;j++){if (j >= i){dp[i][j][0] = dp[i-1][j][0]+dp[i][j-i][0];dp[i][j][1] = dp[i-1][j][1]+dp[i][j-i][1];dp[i][j][0] += dp[i][j][1]/mod;dp[i][j][1] = dp[i][j][1]%mod;}else{dp[i][j][0] = dp[i-1][j][0];dp[i][j][1] = dp[i-1][j][1];}}}if (dp[k][n][0])cout << dp[k][n][0];cout << dp[k][n][1] << endl;
}
int main ()
{cin >> n >> k;memset(dp,0,sizeof(dp));dp[1][0][1] = 1;for (int i = 1;i <= k;i++)dp[i][0][1] = 1;solve();return 0;
}

  

 

转载于:https://www.cnblogs.com/ediszhao/p/4877997.html

Dollar Dayz poj3181相关推荐

  1. bzoj 1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店(高精度完全背包)

    1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 599  Solved: 3 ...

  2. H - Dollar Dayz

    Dollar Dayz Farmer John 想知道,在一家商品价格为1至K (1 <= K <= 100)的店有多少方法能正好花完他的N(1 <= N <= 1000)元钱 ...

  3. Dollar Dayz(完全背包 + 高精度)

    完全背包 完全背包问题和基本的 0-1 背包问题非常类似,区别就是在完全背包问题中,每种物品有无限件. 从每种物品的角度考虑,求解完全背包问题的策略由对某种物品取或者不取变成了取0件.取1件.取2件- ...

  4. 挑战练习题2.3动态规划 poj3181 Dollar Dayz 完全背包

    题目链接: http://poj.org/problem?id=3181 题意: 农夫约翰有N元钱,市场上有价值1--K的商品无限个,求所有的花钱方案? 题解: http://www.hankcs.c ...

  5. Dollar Dayz POJ - 3181(动态规划+大数高低位分离输出)

    题意:就是给出二个数N,和k,有1~k种钱币,每种都 是无限个,用这些种类的钱币可以组合成总钱N有多少种方式. 解题:这就是一个完全背包,把N看成容量,钱币的类型值为 花费和价值.与记录有多少种路径的 ...

  6. Dollar Dayz POJ - 3181

    解法 完全背包+大数...不想写大数了放个python得了 代码 dp=[0 for i in range(2000)] n,k=map(int,input().split()) num=[i for ...

  7. POJ 3181 Dollar Dayz DP

    f[i][j]=f[i-j][j]+f[i][j-1],结果很大需要高精度. //#pragma comment(linker, "/STACK:1024000000,1024000000& ...

  8. poj 3181 Dollar Dayz (整数划分问题---递归+DP)

    题目:http://poj.org/problem?id=3181 思路:将整数N划分为一系列正整数之和,最大不超过K.称为整数N的K划分. 递归:直接看代码: 动态规划:dp[i][j]:=将整数i ...

  9. Dollar Dayz

    完全背包+高精度 #include<cstdio> #include<cstring> #define ll __int64 ll INF=100000000000000000 ...

最新文章

  1. 去大厂面试,说了没高并发经验,面试官还是抓着这个问!
  2. 使用Python分析姿态估计数据集COCO的教程
  3. Nimbus/Supervisor本地目录结构
  4. AES CBC模式下的CBC bit flipping Attack
  5. dma访问主存时_STM32F103单片机(五)——DMA
  6. source insight增加tab标签页的方法之sihook
  7. 解决The current branch is not configured for pull No value for key branch.master.merge found in config
  8. 携程基于Flink的实时特征平台
  9. HTTP API领域在围绕OAS进行整合
  10. mysql修改表的结构_MySQL修改表结构
  11. git remote传到远程
  12. 中国计算机学会推荐国际学术会议和期刊(A类)2019年
  13. Crash监控神器之腾讯Bugly
  14. 如何录制音频文件mp3?给你推荐好用的几款音频录制软件
  15. 2022款Thinkphp家政上门预约系统-全开源系统源码
  16. 利用Python you-get 下载网页视频
  17. 什么是linux手机软件?
  18. 经典激光雷达SLAM系统:LeGO-LOAM
  19. 面对层出不穷的问题,延迟开学的原因就是取消延时服务?
  20. 打造爆款产品只需四步,学会你也能爆单

热门文章

  1. roobo机器人怎么唱歌_可爱的小伙伴 ROOBO布丁豆豆智能陪护机器人评测
  2. tomca7.0 mysql配置连接池_tomcat7.0+mysql连接池配置
  3. python rpc_python与RPC服务
  4. 进去springstrap显示无响应_2020年,28寸IPS面板4K显示器合集,推荐几款代表性的...
  5. ios yymodel 将字典转数组模型_Python3 字典
  6. ei加声调怎么加_空调怎么加氟 空调加氟方法【介绍】
  7. 004_Bean标签
  8. c语言编程功率谱,有谁会用C编写求功率谱(答案越多越好)
  9. Visual Studio 2013软件安装教程
  10. 图像处理:图像中噪声分布和概率密度函数的关系