POJ 3181 Dollar Dayz && Uva 147 Dollars(完全背包)
首先是 Uva 147:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=83
细心看完这题后发现还是完全背包,只不过需要对浮点数处理一下。即把所有硬币的面值都乘以100,化为整数,对输入的数据也作同样的处理,然后就是套完全背包的模板了,在输出时还要用格式和精度来卡一卡你……一开始我没想到用printf可以的,于是百度了cout的输出格式控制,确实cout的格式和精度控制相比起printf来说都很不方便啊。。。
#include<cstdio>
#include<iomanip>
#include<iostream>
using namespace std;
typedef long long LL; const LL coin[]= {,,,,,,,,,,,};
LL f[]= {}; inline void init(){
for(LL i=; i<=; ++i)
for(LL j=coin[i]; j<=; ++j)
f[j]+= f[j-coin[i]];
} int main(){
init();
double money;
cout.setf(ios::fixed);
cout.precision();
while(cin>>money && money!=0.00){
cout<<setw()<<money<<setw()<<f[int(money*+0.5)]<<endl; //这里的money转化为整数时要切记+0.5!防止精度误差!
}
return ;
}
而用scanf和printf的话只需这么简洁即可:
while(scanf("%lf",&money),money!=0.00){
printf("%6.2f%17lld\n",money,f[int(money*+0.5)]);
}
然后是 POJ 3181:http://poj.org/problem?id=3181
虽然还是用硬币作背景,但其实就是整数划分,一开始我数组开小了,结果RE了,后来开大数组后却忘记测试那些强力数据了,到看了别人的博客后才知道会超long long的,我就想难道要用高精度?可别人说直接高精度的话会TLE的,因为测试过最大的数据只是33位而已,所以用两个long long即可,同样式利用高精度的原理来进行加法模拟,要注意一些输出的细节即可:
#include<cstdio>
#include<cstring>
typedef long long LL;
const LL largest= 1e17;
LL f1[], f2[]; int main(){
int n,k;
while(~scanf("%d%d",&n,&k)){
memset(f2,,sizeof(f2));
memset(f1,,sizeof(f1));
f2[]= ;
for(int i=; i<=k; ++i)
for(int j=i; j<=n; ++j){
f1[j]+= f1[j-i];
f2[j]+= f2[j-i];
if(f2[j]>=largest){
f1[j]+= f2[j]/largest;
f2[j]%= largest;
}
}
if(!f1[n]) printf("%I64d\n",f2[n]);
else printf("%I64d%017I64d\n",f1[n],f2[n]);
}
return ;
}
附上kuangbin大神的精辟题解:http://www.cnblogs.com/kuangbin/archive/2012/09/20/2695165.html
POJ 3181 Dollar Dayz && Uva 147 Dollars(完全背包)的更多相关文章
- POJ 3181 Dollar Dayz(全然背包+简单高精度加法)
POJ 3181 Dollar Dayz(全然背包+简单高精度加法) id=3181">http://poj.org/problem?id=3181 题意: 给你K种硬币,每种硬币各自 ...
- poj 3181 Dollar Dayz(完全背包)
Dollar Dayz Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5419 Accepted: 2054 Descr ...
- uva 147 Dollars(完全背包)
题目连接:147 - Dollars 题目大意:有11种硬币, 现在输入一个金额, 输出有多少种组成方案. 解题思路:uva 674 的升级版,思路完全一样, 只要处理一下数值就可以了. #inclu ...
- POJ 3181 Dollar Dayz(高精度 动态规划)
题目链接:http://poj.org/problem?id=3181 题目大意:用1,2...K元的硬币,凑成N元的方案数. Sample Input 5 3 Sample Output 5 分析: ...
- poj 3181 Dollar Dayz (整数划分问题---递归+DP)
题目:http://poj.org/problem?id=3181 思路:将整数N划分为一系列正整数之和,最大不超过K.称为整数N的K划分. 递归:直接看代码: 动态规划:dp[i][j]:=将整数i ...
- POJ 3181 Dollar Dayz (完全背包,大数据运算)
题意:给出两个数,n,m,问1~m中的数组成n,有多少种方法? 这题其实就相当于 UVA 674 Coin Change,求解一样 只不过数据很大,需要用到高精度运算... 后来还看了网上别人的解法, ...
- POJ 3181 Dollar Dayz DP
f[i][j]=f[i-j][j]+f[i][j-1],结果很大需要高精度. //#pragma comment(linker, "/STACK:1024000000,1024000000& ...
- poj 3181 Dollar Dayz
题意:给定一个数p,要求用K种币值分别为1,2,3...K的硬币组成p,问方案数,1,2,2和2,2,1算一种方案即与顺序无关,n <= 1000,k <= 100// 用完全背包做了 这 ...
- POJ 3181 Dollar Dayz 简单DP
这DP虽然简单 但是思考一下还是挺好的 题意是 1,2,3,4....k 用加法凑成N 每个数可取不限个数 令dp[i][j] 表示前i种数凑成j的方案数 然后dp[i][j] = dp[i - 1] ...
随机推荐
- Python 深拷贝和浅拷贝
Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 对象赋值 直接看一段代码: will= ...
- 验证码识别--type5
验证码识别--type5 每一种验证码都是由人设计出来.在设计过程中,可能由于多个方面的原因,造成了这样或那样的可以被利用的漏洞.验证码识别,首先需要解决的问题就是发现这些漏洞--然后利用漏洞解决问题 ...
- Poj(1220),hash
题目链接:http://poj.org/problem?id=1200 这个题,我真是无限MLE,RE,WA,太伤心了,还是写一下吧.题意很简单(英语很好读),最后看了一下金海峰的思路.果然,应该是我 ...
- Android LayoutInflater原理分析
相信接触Android久一点的朋友对于LayoutInflater一定不会陌生,都会知道它主要是用于加载布局的.而刚接触Android的朋友可能对LayoutInflater不怎么熟悉,因为加载布局的 ...
- 2016年6月27日 星期一 --出埃及记 Exodus 14:24
2016年6月27日 星期一 --出埃及记 Exodus 14:24 During the last watch of the night the LORD looked down from the ...
- FlashFXP命令行
flashfxp.exe -upload ftp://user:pass@ip:port -localpath="本地路径" -remotepath="远程FTP上的路 ...
- 编译android源码官方教程(3)下载代码
https://source.android.com/source/downloading.html Downloading the Source IN THIS DOCUMENT Installin ...
- 改变CSS样式
改变CSS样式 1.改变HTML元素样式的语法 //改变HTML样式的语法 document.getElementById(id).style.property = new style 例子: < ...
- 第三个 android控件
android控件以及控件对应的属性:
- 高通平台点亮LCD个人总结
点击打开链接 高通平台LCD模块大致分为两部分:KERNEL和LK.在进行点屏之前,应该认真查看LCD原理图,弄清楚LCD亮屏需要满足的条件和上电时序,同时可以跟LCD IC原厂拿到初始化代码. 首先 ...