Dollar Dayz(完全背包 + 高精度)
完全背包
完全背包问题和基本的 0-1 背包问题非常类似,区别就是在完全背包问题中,每种物品有无限件。
从每种物品的角度考虑,求解完全背包问题的策略由对某种物品取或者不取变成了取0件、取1件、取2件……等很多种。按基本的01背包问题求解算法的思路,设 f[ i ][ v ] 表示前i种物品恰放入一个载荷能力为 v 的背包的最大价值。则状态转移方程为 f[ i ][ v ] = max{ f[ i - 1 ][ v - k * w[ i ] ] + k * p[ i ] | 0 <= k * p[ i ] <= v }。
核心代码:
for (i=1; i<=n; i++) //阶段:枚举每个物品for (v=0; v<=M; v++) //状态:枚举背包载荷能力for (k=1; k<=v div w[i]; k++) //决策f[i][v]=max(f[i-1][v], f[i-1][v-k*w[i]]+k*p[i])
Dollar Dayz
题意:
农夫John去了在Cow Store的Dollar Days,发现有无限数量的工具在出售。在他第一次去的时候,这些工具以1美元、2美元和3美元的价格出售。农夫John正好有5美元,他可以买每件1美元的工具5个;或者买每件3美元的工具1个,然后买每件2美元的工具1个;等等;如果农夫John把所有的钱花在买工具上,那么就一共有5种不同的组合方式,如下所示:
1 @ US$3 + 1 @ US$2
1 @ US$3 + 2 @ US$1
1 @ US$2 + 3 @ US$1
2 @ US$2 + 1 @ US$1
5 @ US$1
请您编写一个程序,计算农夫John在Cow Store花费N美元(1 <= N <= 1000)可以购买工具的方式数,工具的价格成本从1美元到K美元(1 <= K <= 100)。
输入
输入一行,给出两个用空格分隔的整数:N和K。
输出
输出一行,给出农夫John花费他的钱的方式数。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
#define ll long long
ll inf=1000000000000000000;
ll a[1001];//低位
ll b[1001];//高位
int main()
{int n,k;scanf("%d%d",&n,&k);memset(a,0,sizeof(a));memset(b,0,sizeof(b));a[0]=1;for(int j=1;j<=k;j++)for(int i=j;i<=n;i++){b[i]=(b[i]+b[i-j])+(a[i]+a[i-j])/inf;a[i]=(a[i]+a[i-j])%inf;}if(b[n]) cout<<b[n];cout<<a[n]<<endl;return 0;
}
Dollar Dayz(完全背包 + 高精度)相关推荐
- 挑战练习题2.3动态规划 poj3181 Dollar Dayz 完全背包
题目链接: http://poj.org/problem?id=3181 题意: 农夫约翰有N元钱,市场上有价值1--K的商品无限个,求所有的花钱方案? 题解: http://www.hankcs.c ...
- bzoj 1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店(高精度完全背包)
1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 599 Solved: 3 ...
- Dollar Dayz
完全背包+高精度 #include<cstdio> #include<cstring> #define ll __int64 ll INF=100000000000000000 ...
- H - Dollar Dayz
Dollar Dayz Farmer John 想知道,在一家商品价格为1至K (1 <= K <= 100)的店有多少方法能正好花完他的N(1 <= N <= 1000)元钱 ...
- Dollar Dayz POJ - 3181(动态规划+大数高低位分离输出)
题意:就是给出二个数N,和k,有1~k种钱币,每种都 是无限个,用这些种类的钱币可以组合成总钱N有多少种方式. 解题:这就是一个完全背包,把N看成容量,钱币的类型值为 花费和价值.与记录有多少种路径的 ...
- Dollar Dayz-完全背包+大数处理
[题目] Farmer John goes to Dollar Days at The Cow Store and discovers an unlimited number of tools on ...
- Dollar Dayz poj3181
http://poj.org/problem?id=3181 这个题目一开始就能看出来是个dp问题,但是我并没有一开始就看出来是一个完全背包为题,只是想着根据以前的方法,这个问题应该是可以找到规律的, ...
- Dollar Dayz POJ - 3181
解法 完全背包+大数...不想写大数了放个python得了 代码 dp=[0 for i in range(2000)] n,k=map(int,input().split()) num=[i for ...
- POJ 3181 Dollar Dayz DP
f[i][j]=f[i-j][j]+f[i][j-1],结果很大需要高精度. //#pragma comment(linker, "/STACK:1024000000,1024000000& ...
最新文章
- 第六周项目一-分数类的雏形(1)
- python代码块所属关系的语法-天元高校邦数据科学通识课【Python基础语法】答案...
- Visual Studio 2013 error MS8020 Build tools v140 cannot be found 解决系统 不同部分软件 所依赖编译器版本不同的矛盾
- mysql-防止XSS攻击
- java objective-c,Objective-C基础教程学习笔记(附录)从Java转向Objective-C
- Android UI布局优化之ViewStub
- Java JDK下载与安装教程
- python can通信_Python中的高级/抽象Canbus接口
- 联想启天M5710不开机,开机后卡logo
- 可以作用c语言常量的是,正确的C语言常量是什么?
- rgb的原理以及应用简介
- Struts2项目实战 微云盘(七):文件上传下载
- 看看什么叫穿越失败,我承认我确实笑了
- SpringBoot整合Shiro搭建登录注册认证授权权限项目模板
- Linux上的服务器无法调用新浪邮箱发送邮件
- 3999 元起,小米 13 正式发布:骁龙 8 Gen 2、IP68、超窄边框直屏、徕卡三摄
- 农产品进出口成都代办公司注册流程
- 2018-9-25实验二
- 玩转Redis-干掉钉子户-没有设置过期时间的key
- 集赞转发送大礼 有赞你就来
热门文章
- 如何进行在线教育系统软件平台开发?开发成本有多少
- Uniapp 接入微信H5登录,并获取openid和unionid 含Sql、PHP完整代码
- MTK6765编译环境搭建
- C链表:“数形结合”让调试更快纠错
- Coroutine的浅析和简单实现
- ps命令的使用(linux)
- 铁路旁的一条平行小路上一行人与一骑车人同时向东行进,行人速度为3.6千米/时,骑车人的速度为10.8千米/时,如果有一列火车从他们背后开过来,它通过行人用了22秒,通过骑车人用了26秒,问这列火车
- 在Linux桌面条件下打开Terminal的快捷键
- 使用Xstream_iterator进行文件复制
- Bash漏洞分析溯源 cgi文件 (CVE-2014-6271) --墨者学院