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来说都很不方便啊。。。
1 #include<cstdio> 2 #include<iomanip> 3 #include<iostream> 4 using namespace std; 5 typedef long long LL; 6 7 const LL coin[15]= {0,5,10,20,50,100,200,500,1000,2000,5000,10000}; 8 LL f[30010]= {1}; 9 10 inline void init(){ 11 for(LL i=1; i<=11; ++i) 12 for(LL j=coin[i]; j<=30000; ++j) 13 f[j]+= f[j-coin[i]]; 14 } 15 16 int main(){ 17 init(); 18 double money; 19 cout.setf(ios::fixed); 20 cout.precision(2); 21 while(cin>>money && money!=0.00){ 22 cout<<setw(6)<<money<<setw(17)<<f[int(money*100+0.5)]<<endl; //这里的money转化为整数时要切记+0.5!防止精度误差! 23 } 24 return 0; 25 }
而用scanf和printf的话只需这么简洁即可:
1 while(scanf("%lf",&money),money!=0.00){ 2 printf("%6.2f%17lld\n",money,f[int(money*100+0.5)]); 3 }
然后是 POJ 3181:http://poj.org/problem?id=3181
虽然还是用硬币作背景,但其实就是整数划分,一开始我数组开小了,结果RE了,后来开大数组后却忘记测试那些强力数据了,到看了别人的博客后才知道会超long long的,我就想难道要用高精度?可别人说直接高精度的话会TLE的,因为测试过最大的数据只是33位而已,所以用两个long long即可,同样式利用高精度的原理来进行加法模拟,要注意一些输出的细节即可:
1 #include<cstdio> 2 #include<cstring> 3 typedef long long LL; 4 const LL largest= 1e17; 5 LL f1[1008], f2[1008]; 6 7 int main(){ 8 int n,k; 9 while(~scanf("%d%d",&n,&k)){ 10 memset(f2,0,sizeof(f2)); 11 memset(f1,0,sizeof(f1)); 12 f2[0]= 1; 13 for(int i=1; i<=k; ++i) 14 for(int j=i; j<=n; ++j){ 15 f1[j]+= f1[j-i]; 16 f2[j]+= f2[j-i]; 17 if(f2[j]>=largest){ 18 f1[j]+= f2[j]/largest; 19 f2[j]%= largest; 20 } 21 } 22 if(!f1[n]) printf("%I64d\n",f2[n]); 23 else printf("%I64d%017I64d\n",f1[n],f2[n]); 24 } 25 return 0; 26 }
附上kuangbin大神的精辟题解:http://www.cnblogs.com/kuangbin/archive/2012/09/20/2695165.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端