HDU 2955 Robberies by Assassin
来源:互联网 发布:desmume mac中文 编辑:程序博客网 时间:2024/06/05 19:06
这个题目有毒。。一开始就注意到了需要统计A、B、C三个的数值,但是他说单个物品不超过600实在是误导。。。
这是一个dp,转换方程
dp[j]=max(dp[j-(int)(100*value[i])]+value[i],dp[j])
其中value是统计的合法报销的帐目、dp[i]表示价格*100(因为精确到两位,所以乘以100)可以得到的最大报的账目。简单的背包问题。
#include<bits/stdc++.h>#define input freopen("input.txt","r",stdin)using namespace std;float sum;float dp[3000010];float check[3],value[40];int main(){ input; int n,i,j,m,flag,pos; char c; float key; while(cin>>sum>>n) { if(n==0) break; for(pos=1,i=1;i<=n;i++) { memset(check,0,sizeof(check)); flag=1; scanf("%d",&m); for(j=1;j<=m;j++) { getchar(); c=getchar(); getchar(); cin>>key; if(c!='A'&&c!='B'&&c!='C') { flag=0; } check[c-'A']+=key; if(check[c-'A']>600) { flag=0; } if(check[0]+check[1]+check[2]>1000) { flag=0; } } if(flag) { value[pos++]=check[0]+check[1]+check[2]; } } memset(dp,0,sizeof(dp)); for(i=1;i<pos;i++) { for(j=(int)(sum*100);j>=(int)(100*value[i]);j--) { dp[j]=max(dp[j-(int)(100*value[i])]+value[i],dp[j]); } } printf("%.2lf\n",dp[(int)(sum*100)]); } return 0;}
代码不好,欢迎指正
0 0
- HDU 2955 Robberies by Assassin
- HDU2955 Robberies by Assassin
- HDU 2571 命运 by Assassin
- HDU 2159 FATE by Assassin
- HDU 5965 扫雷 By Assassin
- HDU 1506 City Game by Assassin
- HDU 1069 Monkey and Banana by Assassin
- HDU 2487 Ugly Windows By Assassin
- HDU 2489 Minimal Ratio Tree By Assassin
- HDU 1054 Strategic Game By Assassin
- HDU 5927 Auxiliary Set By Assassin
- HDU 2686 Matrix By Assassin 多线程dp
- HDU 3001 Travelling By Assassin 3进制状压
- hdu 2955 Robberies
- HDU 2955 - Robberies
- hdu 2955 Robberies DP
- Hdu 2955 - Robberies
- hdu 2955 Robberies
- 常见的设计模式与原则
- float布局:高度塌陷以及解决办法
- JQuery 小技巧大全
- Android开发之Animaions(一 )
- TextView 小技巧
- HDU 2955 Robberies by Assassin
- 史上最严重数据泄露:5亿雅虎账户于2014年被盗
- H5基础——(5)怪异盒模型、弹性盒模型、倒影及阴影
- poj 1679
- 2017校招滴滴笔试编程题(深搜+剪枝)
- 写一函数free,将上题用new函数占用的空间释放。Free(p)表示将p指向的单元以后的内存段释放
- HDU-2022
- Java源码阅读的真实体会
- 比较两数大小