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] ...
随机推荐
- 【转】SVN服务器搭建--Subversio与TortoiseSVN的配置安装
转载地址:http://blog.csdn.net/xinxin19881112/article/details/6410263 1. Subversio和TortoiseSVN 简介 Subver ...
- sql排序 去除默认升降序排序case方法////遍历数据库所有表及统计表数据总数
case排序法: end 还有EXEC法 可以网上查 SQLServer遍历数据库所有表及统计表数据总数: DECLARE @TableName varchar(); CREATE TABLE #Ge ...
- HashTable的实现原理
转载:http://wiki.jikexueyuan.com/project/java-collection/hashtable.html 概述 和 HashMap 一样,Hashtable 也是一个 ...
- asp.net webapi初探(一)
本人对webapi尚没有深入研究,初次接触发现了在数据请求时的几点现象. 先切入代码 1.如果action中开头带有Get默认就是get方式,不带Get默认就是post方式 public string ...
- web和winform的MD5加密
MD5加密,web和winform Web /// <summary> /// 获取获取MD5加密后字符串 /// </summary> /// <param name= ...
- Android Context完全解析
Context类型 我们知道,Android应用都是使用Java语言来编写的,那么大家可以思考一下,一个Android程序和一个Java程序,他们最大的区别在哪里?划分界限又是什么呢?其实简单点分析, ...
- ThreadLocal实现线程范围内共享
线程范围内共享,即是对相同一段代码,在不同的模块调用时使用一份数据,而在另外一个线程中又使用另外一份数据. ThreadLocal使用set方法为一个新的线程增加一条记录,key是各自的线程,valu ...
- 小扩展大用处,自己扩展一个ForeachRead吧
是否用过IList的扩展方法 Foreach,而郁闷IEnumerable没有这个扩展?(没用过??用用吧,真的很方便,可以少好几行呢!!) 是否为了有一个索引而不得不用 for 而不能用 forea ...
- 教你如何使用php session
原文网址:http://www.jb51.net/article/42500.htm 学会php session可以在很多地方使用,比如做一个后台登录的功能,要让程序记住用户的session,其实 ...
- [HDOJ4609]3-idiots(FFT,计数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:n个数,问取三个数可以构成三角形的组合数. FFT预处理出两个数的组合情况,然后枚举第三个 ...