Vijos P1836 HYS与七夕节大作战
2016-09-13 15:01
162 查看
P1836HYS与七夕节大作战Accepted
背景
一年一度的七夕节到了,HYS又开始烦恼他的约会安排,作为一名后辈,你被他选中来帮助他。描述
由于HYS有很多名女友,所以他不可能在一天之内和所有的女友都进行约会,于是你决定帮他选定一些女友进行约会。每一个女友的约会都不相同,和一名女友约会,会需要T的时间,而每一个女友的重要度不尽相同。时间是宝贵的,一天只有24hrs,所以你决定帮他安排好一个计划,可以让他尽量和最重要的女友"们"约会。但是,当你收到他的女友名单的时候,你发现女友的数量实在太多了,不得不借助计算机来帮你安排。当然,HYS在同一时间不可能和两个女友约会,但是约会的先后顺序没有影响。格式
输入格式
第一行有一个数N,代表HYS的女友数量。之后第2行到N+1行每行有两个数,T和V。分别代表约会所需要的时间(表示为占一天的百分比)和女友的重要度。输出格式
第一行输出一个数,表示在你的安排下,与HYS约会的女友的重要度之和(要求精确到小数点后5位)。样例1
样例输入1[复制]
8 37.50000 5 12.50000 5 6.75000 3 6.75000 3 12.50000 4 25.00000 5 6.75000 3 8.00000 4
样例输出1[复制]
27
限制
1≤N≤1000;1≤V≤5;0≤T≤100;其中T的精度保证和输出精度一致。这个题最开始想的是把小数换成整数,也就是乘以100000,然后再背包,然后就TLE了……
后来看了人家的题解,发现可以逆向的背包,也就是求重要度不超过sum(v1,v2……,vn)的情况下,时间最小值
因为重要度是整数,方便处理,,,
也就是dp[j] = min(dp[j],dp[j - v[i]] + t[i]);
那么只要dp[j] 是小于100%的,j这个重要度就是可以达到的,更新最大值j即可
这是一个逆向思维的背包代码:
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define maxn (1000 + 20)#define inf 0x3f3f3f3f#define pi acos(-1.0)using namespace std;typedef long long int LLI;double t[maxn];int v[maxn];double dp[10000000 + 50];int main() {// freopen("in.txt","r",stdin);// freopen("out1.txt","w",stdout);int n,sum = 0;scanf("%d",&n);for(int i = 1; i <= n; i ++)scanf("%lf%d",&t[i],&v[i]),sum += v[i];for(int i = 0;i <= sum;i ++) dp[i] = 1000.0;dp[0] = 0;int re = 0;for(int i = 1; i <= n; i ++) {for(int j = sum; j >= v[i]; j --) {dp[j] = min(dp[j],dp[j - v[i]] + t[i]);if(dp[j] < 100.0) re = max(re,j);}}printf("%d\n",re);return 0;}
相关文章推荐
- vijos P1836HYS与七夕节大作战 (01背包之2--转换dp对象)
- Vijos P1836HYS与七夕节大作战
- HYS与七夕节大作战 vijos
- vijos P1836HYS与七夕节大作战 (01背包之2--转换dp对象)
- Vijos 1836题:HYS与七夕节大作战
- Vjios1836_HYS与七夕节大作战
- [转载] 美国大兵的22条作战条例——关于生活的另类思
- 一辈子都忘不了的七夕节
- 作战第二
- 《Java程序员职场全攻略:从小工到专家》连载九:散兵游勇还是团队作战
- 转作战双方(下)
- 汉澳现代战争军事指挥作战系统 v1.5
- 软件开发人员的作战手册 - 让程序员活的久一点
- 国漫教你七夕节发什么样的短信
- 汉澳现代战争军事指挥作战系统 v3.0
- 软件开发人员的作战手册 - 让程序员活的久一点
- HDOJ1215 ( 七夕节 )【居然还可以这么解~】
- 系统集成资质培训 - 项目管理应考作战地图
- HDU-1218七夕节