码迷,mamicode.com
首页 > 其他好文 > 详细

繁忙时段

时间:2016-08-20 20:33:51      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

busy
       致标的一天是很忙的,特别是有一段繁忙时段是最让他头痛的了,因为任务很多,所以他总是为了想办法完美的完成它们而伤神。
       现在已知致标的繁忙时间是什么时候、为了使得题目简化、已知一个TIME、表示致标的繁忙时间长度、也可以这么理解,理解为致标要完成很多工作的时间只剩下TIME这么多了,所以称为繁忙时段。
        接下来致标可以选择做的工作有N个,致标由经验就可以判断每个工作的性质,我们用3个属性来描述一个工作、分别为D , T , P;  D 表示致标给它的定位的价值、T表示做它需要的时间、P表示它属于哪一类工作,所有的工作分两类,一类是A类,这种工作只能做一次、一类是B类,这种工作就可以无限做,但是做它也会得到无异于A类的价值,当然也会消耗相应的时间。
        现在大家要快点帮致标解决这一难题啊!
        利用剩下的TIME时间里,做工作使得致标获得的工作价值最大。 (请大家注意、数据范围在最后)       
输入数据 :
    第一行 N , TIME 分别表示 N个工作 、 TIME为剩下的时间;
接下来N行 ,每行2个正整数1个字符 D , T , P ;分别表示该工作的价值、时间、以及属于A或者B类工作;
(数据保证任意P的取值都是A或者B);
输出数据:
  一行 : 能带走的最大价值;
busy.in
5 10
2 3 A
2 4 A
2 5 A
2 6 A
5 2 B
busy.out
25

数据范围:
对于10%的数据  N <=10 , TIME <= 100
对于 30%的数据 N<=200 ,TIME <= 3000
对于 50%的数据 N <=1000 TIME <= 10000
对于 100% 的数据 N<=2000 TIME <=20000
对于任意物品的价值 <= 350;

 

这道题很简单,就是一个01背包+完全背包,

如果不知道怎么做可以百度。

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cstring>
 4 #include <iostream>
 5 
 6 using namespace std;
 7 int n,T;
 8 struct id{int vi,ti,note;};id thi[2003];
 9 int f[20003];
10 
11 int main( ){
12     scanf("%d%d",&n,&T);char lei;
13     for(int x=1;x<=n;x++){
14         scanf("%d%d%s",&thi[x].vi,&thi[x].ti,&lei);
15         if(lei==A)thi[x].note=1;else thi[x].note=0;
16         }    
17     
18     for(int x=1;x<=n;x++){
19         if(thi[x].note==0)
20         for(int y=thi[x].ti;y<=T;y++)
21             f[y]=max(f[y],f[y-thi[x].ti]+thi[x].vi);    
22         else
23         for(int y=T;y>=thi[x].ti;y--)    
24             f[y]=max(f[y],f[y-thi[x].ti]+thi[x].vi);
25     }
26     printf("%d",f[T]);
27     return 0;
28 }

 

繁忙时段

标签:

原文地址:http://www.cnblogs.com/Ateisti/p/5791197.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!