hdu_1074_Doing Homework(状压DP)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1074
题意:给你n个课程(n<=15)每个课程有限制的期限和完成该课程的时间,如果超出时间,每超一天扣一分,问完成全部课程,最少会扣多少分。
题解:典型的状压DP
#include<cstdio>
#define FFC(i,a,b) for(int i=a;i<=b;++i) int T,n,end,inf=1e9,cur,now,nowd,nowc,v[];
struct dt{char nm[];int d,c;}ta[];
struct dtt{int mi,pre,d;}dp[<<];//mi表示最小扣分,pre表示上一种状态,d表示当前时间 void out(int now){//递归输出结果
if(dp[now].pre==-)return;
out(dp[now].pre);
FFC(i,,n-){
int cur=<<i;
if((now&cur)&&!v[i+])printf("%s\n",ta[i+].nm),v[i+]=;
}
} int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n),end=(<<n)-,dp[].pre=-,dp[].d=,dp[].mi=;
FFC(i,,n)scanf("%s%d%d",ta[i].nm,&ta[i].d,&ta[i].c),v[i]=;
FFC(i,,(<<n)-)dp[i].mi=inf;
FFC(i,,end)FFC(j,,n-){
if(((cur=<<j)&i)==){//如果没完成,则完成这个作业
now=cur|i,nowd=dp[i].d+ta[j+].c;
nowc=nowd-ta[j+].d,nowc=nowc<=?:nowc;
if(dp[now].mi>dp[i].mi+nowc)
dp[now].mi=dp[i].mi+nowc,dp[now].pre=i,dp[now].d=nowd;
}
}
printf("%d\n",dp[end].mi);
out(end);
}
return ;
}
hdu_1074_Doing Homework(状压DP)的更多相关文章
- HDU 1074 Doing Homework 状压dp(第一道入门题)
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- HDU1074 Doing Homework —— 状压DP
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1074 Doing Homework Time Limit: 2000/1000 MS (J ...
- HDU 1074 Doing Homework (状压DP)
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- HDU 1074 Doing Homework 状压DP
由于数据量较小,直接二进制模拟全排列过程,进行DP,思路由kuangbin blog得到,膜拜斌神 #include<iostream> #include<cstdio> #i ...
- HDU 1074 Doing Homework【状压DP】
Doing Homework Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he ...
- Doing Homework HDU - 1074 (状压dp)
Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every ...
- kuangbin专题十二 HDU1074 Doing Homework (状压dp)
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- HDU 1074:Doing Homework(状压DP)
http://acm.hdu.edu.cn/showproblem.php?pid=1074 Doing Homework Problem Description Ignatius has just ...
- HDU1074:Doing Homework(状压DP)
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
随机推荐
- js构造函数的完美继承(欢迎吐槽)
function Animal(){ //定义父类 this.leibie="动物"; } Animal.prototype.test1=[1,2]; function Cat(n ...
- 两个队列实现一个栈,剑指offer P59
public class StackByQueue { private LinkedList<String> queue1; private LinkedList<String> ...
- Python语法点滴
string: string.capitalize() 把字符串的第一个字符大写 string.startswith(obj) string.endswith(obj) string.find(s ...
- php 5.5 xhprof for windows
今天看到一个好的性能优软件xhprof(有facebook开发的类库)在国内找了很多网站都没有找到相关php5.5的扩展,只好FQ还是外面的世界精彩一下就找到了link (http://windows ...
- delphi 关键字
下面的关键字不能被重新定义或用作标志符:and array as asm begin case class const constructor destructor dispinterface div ...
- 修改MANIFEST.MF方法
步骤: 1.用winrar等其他解压工具,右键选择"用winrar打开": 2.找到MANIFEST.MF文件,鼠标左键拖拽到桌面: 3.最后一行加入Main-Class:(空格) ...
- ZZNU 1988: Sn
题目描述 给你两个数 n, p(0 < n,p <= 10^15); a1 = 1; a2 = 1+2; a3 = 1+2+3; ... an = 1+2+3+...+n Sn ...
- C语言 · 数的统计
问题描述 在一个有限的正整数序列中,有些数会多次重复出现在这个序列中. 如序列:3,1,2,1,5,1,2.其中1就出现3次,2出现2次,3出现1 次,5出现1次. 你的任务是对于给定的正整数序列,从 ...
- 【界面优化】使用viewpagerindicator添加下划线滑动动画
开源代码viewpagerindicator里面没有实现tab下划线切换过程中的移动动画,都是很突兀的多个fragement之间的切换,导致用户体验略差,google了下相关问题,发现一片博文: ht ...
- Oracle 四种列转行的方法
1. Oracle自带列转行函数listagg: 实例: with temp as( select 'China' nation ,'Guangzhou' city from dual union a ...