首先是 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(完全背包)的更多相关文章

  1. POJ 3181 Dollar Dayz(全然背包+简单高精度加法)

    POJ 3181 Dollar Dayz(全然背包+简单高精度加法) id=3181">http://poj.org/problem?id=3181 题意: 给你K种硬币,每种硬币各自 ...

  2. poj 3181 Dollar Dayz(完全背包)

    Dollar Dayz Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5419   Accepted: 2054 Descr ...

  3. uva 147 Dollars(完全背包)

    题目连接:147 - Dollars 题目大意:有11种硬币, 现在输入一个金额, 输出有多少种组成方案. 解题思路:uva 674 的升级版,思路完全一样, 只要处理一下数值就可以了. #inclu ...

  4. POJ 3181 Dollar Dayz(高精度 动态规划)

    题目链接:http://poj.org/problem?id=3181 题目大意:用1,2...K元的硬币,凑成N元的方案数. Sample Input 5 3 Sample Output 5 分析: ...

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

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

  6. POJ 3181 Dollar Dayz (完全背包,大数据运算)

    题意:给出两个数,n,m,问1~m中的数组成n,有多少种方法? 这题其实就相当于 UVA 674 Coin Change,求解一样 只不过数据很大,需要用到高精度运算... 后来还看了网上别人的解法, ...

  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

    题意:给定一个数p,要求用K种币值分别为1,2,3...K的硬币组成p,问方案数,1,2,2和2,2,1算一种方案即与顺序无关,n <= 1000,k <= 100// 用完全背包做了 这 ...

  9. POJ 3181 Dollar Dayz 简单DP

    这DP虽然简单 但是思考一下还是挺好的 题意是 1,2,3,4....k 用加法凑成N 每个数可取不限个数 令dp[i][j] 表示前i种数凑成j的方案数 然后dp[i][j] = dp[i - 1] ...

随机推荐

  1. eclipse+maven 无法编译

    Archive for required library: 'F:/mavenLib/org/mybatis/mybatis/3.4.1/mybatis-3.4.1.jar' in project ' ...

  2. c#之线程

    //Process[] pro= Process.GetProcesses(); //foreach (var item in pro) //{ // Console.WriteLine(item); ...

  3. Unity-Animator深入系列---StateMachineBehaviour初始化时间测试

    回到 Animator深入系列总目录 结果和想的有点出入 测试结果: 1.SMB初始化会被调用多次,次数不可控,当Animator组件重复开关则重复初始化. 2.SMB支持构造函数 MyClass p ...

  4. 使用Texture2D创建Cubemap

    网上有很多,但大多使用Camera.RenderToCubemap接口,不能满足需求. 写了段代码可以载入Texture2D生成Cubemap(在Editor下运行): /// <summary ...

  5. vsftp 用无法登陆的用户名登陆(也叫虚拟用户)并进入到自己的文件夹test

    1.不需要使用到PAM认证也可以,useradd redhat; usermod -s /sbin/nologin redhat; passwd redhat. 2.userlist_deny=NO; ...

  6. java中的动态代理机制

    java中的动态代理机制 在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface).另一个则是 Proxy(Class),这一个类和接口是实现 ...

  7. 让VS自动生成我们自己的注释

    1. 找到你VS的安装目录:C:\Program Files (x86)\Microsoft Visual Studio 11.0 2. 在VS安装路径下依次找到这些文件夹:\Common7\IDE\ ...

  8. 将具有关联关系的两个表从hibernate查询出来转成json对象时报错

    第一篇文章: 相信大家做过JSON相关的东西对这个异常并不陌生,这个异常是由于JSONObject插件内部会无限拆解你传入的对象,直到没有可拆解为止,问题就在这,如果你传入的对象有外键关系,或者相互引 ...

  9. thinkphp 删除多条记录

    删除id为123456的记录 $ids=array(1,2,3,4,5,6);$maps["id"] = array("in",$ids);$this-> ...

  10. Win8.1系统下搭建IIS8.5+php-5.6运行环境教程

    本文是在window 8.1 的IIS8.5 中搭建php环境 步骤: 1.下载php-5.6程序包 ,官网地址为:http://windows.php.net/download/     注意要下载 ...