Vjios1836_HYS与七夕节大作战
来源:互联网 发布:苹果电脑装office软件 编辑:程序博客网 时间:2024/04/27 18:48
因为本身楼主对于编程这方面很菜,所以请多多包容,谢谢。
//下面是正文
这道题其实就是一个很简单的背包问题,关键是如何计算带有小数位的数
我的想法非常简单,就是把小数化成整数,也就是乘10000,程序是这样的:
for(i=1;i<=n;i++) {cin>>h>>b[i];a[i]=h*10000;}这里a[ ]表示占用时间百分比,b[ ]是价值。
当我们用这样的程序提交时,会发生超时:
#include <bits/stdc++.h>using namespace std;long a[10001];long double f[1000005],b[10001];int main(){memset(f,0,sizeof(f));int i,k,l,n,m;long j;cin>>n;long double h;for(i=1;i<=n;i++) {cin>>h>>b[i];a[i]=h*10000;}for(i=1;i<=n;i++) {for(j=1000000;j>=a[i];j--) {f[j]=max(f[j],f[j-a[i]]+b[i]);}}cout<<f[1000000]<<endl;return 0;}
如果数组a[]扩大10000,明显循环了很多数,所以我就把循环内容和数组都缩小成了原来的1/10:
#include <bits/stdc++.h>using namespace std;long a[10001];long double f[2400005],b[10001];int main(){memset(f,0,sizeof(f));int i,k,l,n,m;long j;cin>>n;long double h;for(i=1;i<=n;i++) {cin>>h>>b[i];a[i]=h*1000;}for(i=1;i<=n;i++) {for(j=100000;j>=a[i];j--) {f[j]=max(f[j],f[j-a[i]]+b[i]);}}cout<<f[100000]<<endl;return 0;}这样我们就可以AC了。
1 0
- Vjios1836_HYS与七夕节大作战
- Vijos P1836HYS与七夕节大作战
- HYS与七夕节大作战 vijos
- Vijos P1836 HYS与七夕节大作战
- Vijos 1836题:HYS与七夕节大作战
- vijos P1836HYS与七夕节大作战 (01背包之2--转换dp对象)
- 哲学与哲学家的观点大作战
- 说说夏日大作战
- make大作战
- 求职大作战1
- 爱情风水大作战
- 选课大作战
- 消除BUG大作战
- 选课大作战
- C 眼力大作战
- 筷子大作战
- 得分大作战
- 贪吃蛇大作战
- 列表和集合
- linux设备驱动中的中断与时钟
- myBatis查询某个时间区间数据<if test=""> 如何写判断条件,and 里面的内容怎么写?
- c语言解码GPS--实现篇
- Android-那些工具
- Vjios1836_HYS与七夕节大作战
- delphi中pchar、char、string的定义与区别
- android动态加载jar
- windows编程之MFC创建单文档应用之菜单添加
- Android Studio运行缓慢的解决办法
- java gc
- 在今天的测试过程中,我刚开始使用get方法传递参数,出现乱码,但是使用post传参数好着的,需要在tomcat的server.xml里面进行设置URIEncoding="UTF-8"即可
- atcom.genuitec.eclipse.ast.deploy.core.Deployment.<init>(Unknown Source)
- 如何修改robotFramework-ride 背景色