HDU 1074 Doing Homework 状压DP
2016-02-14 00:08
337 查看
题目链接:Doing Homework
巨恶心。找了一晚上bug,发现for循环初始化居然不能代替memset。真心不服、
附AC代码:
View Code
巨恶心。找了一晚上bug,发现for循环初始化居然不能代替memset。真心不服、
附AC代码:
/* 题意:给出n(1<=n<=15)个作业,和该作业的dealline 和 完成所需时间。作业晚交一天就会扣1分。 要知道完成所有任务使减少的分数最少的完成方案。如果方案数有多个,输出字典序最小的。作业名称长度不会超过100个字符。 //思路:从当前时间为0开始,寻找最紧迫的作为下一个要完成的目标,直到所有的任务完成。 当前最需要完成的应该是dealine-tasktime当前时间差最少的。也就是可以按照deadine-tasktime,从小到大排序。依次完成。 //以上出自无厘头。虽然也并没有验证这样为什么不对、 思路:状压DP。因为N最大是15.所以用一个数m,2^15表示总的状态。变成二进制时0和1分别表示当前作业没做和做了。从0到m的每一个状态, 遍历每一个作业在当前状态下是否已经完成,如果没有,继续下一个作业。否则,比较当前状态没有完成该作业到完成该作业减少的时间和原来需要的时间,取最小值。 dp[i] = j。表示i状态下减少时间最少是j。T_T说不清楚。具体见代码吧。。 */ #include <stdio.h> #include <string.h> #include <iostream> using namespace std; const int N = 16, M = 1 << N; int d , c , n; int dp[M], pre[M], t[M]; char s [105]; void print(int k) { if(k == 0) return; print(pre[k]); k -= pre[k]; for(int i = 0; i < n; ++i) if(k & 1 << i) puts(s[i]); } int main() { int T, m, cost; scanf("%d", &T); while(T--) { scanf("%d", &n); for (int i=0; i<n; ++i) { scanf("%s%d%d", s[i], &d[i], &c[i]); } memset(dp, 0x3f, sizeof(dp)); dp[0] = t[0] = 0; // 边界 所有作业都没做的扣分为0 m = 1 << n; // 0到m 表示所有的状态 for (int i=1; i<m; ++i) { // 枚举每一个状态 for (int j=0; j<n; ++j) { // 判断该状态写每种作业做了没有 if ((i & 1 << j) == 0) // 如果没做 continue; int k = i - (1 << j); // k状态表示当前i状态没做作业j时. t[i] = t[k] + c[j]; // t[i]表示到从k到i状态时花费的最少时间 cost = t[i] > d[j] ? t[i] - d[j] : 0; //和j作业的截止时间对比,得出当前减少的时间 if (dp[k] + cost <= dp[i]) { //判断是不是要从k到i。 dp[i] = dp[k] + cost; pre[i] = k; } } } printf("%d\n", dp[m-1]); print(m-1); } return 0; }
View Code
相关文章推荐
- BestCoder Round #72 (div.2) B.Clarke and points
- 【机器学习】Tensorflow学习笔记
- 关于Struts2中的s标签和JSTL中的c标签的对比
- cocos2d-x中的Slider控件
- HDU 2089 不要62(数位dp&记忆化搜索)
- svn版本控制心得
- 1036. Boys vs Girls (25)
- Java面向对象程序设计----核心概念
- iOS本地推送(本地通知)
- 王学岗左右滚动
- JSTL标签库的一些基础实例
- 设计更快的网页(一):图片压缩
- Linux系统中bash shell编程的10个基础问题讲解
- Linux shell编程中IO和条件及循环处理的细节问题讨论
- .NET实现魔方游戏(一)之任意阶魔方的表示
- python动态网页批量爬取
- 如何使用python爬取csdn博客访问量
- Python在Console下显示文本进度条的方法
- python编码最佳实践之总结
- PHP使用socket发送HTTP请求的方法