博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1074 Doing Homework DP 状压DP
阅读量:6606 次
发布时间:2019-06-24

本文共 1680 字,大约阅读时间需要 5 分钟。

  题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074

  题目描述: 给你所有课程的截止时间和工作时长, 一次只能做一种作业, 问最少罚时几天 N <= 15

  解题思路: 由于N很小, 所以第一反应就是状压DP, 我们可以用一个15位二进制数来表示各个课程做完还是没做完, 然后从 S 从 1 到 1 << N 枚举 i 从 1 到 N 枚举, 如果S & (1<<i) 有效则说明i 属于情况 S, 这样我们从上一步S - 1 << i 转移过来就可以, 记录路径就是每当出现答案的更新就将此时的状态和当前处理的位数记住, 压入栈中, 最后再倒着打出来

  代码: 

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define lson l, m, rt<<1#define rson m+1, r, rt<<1|1using namespace std;const int maxn = 20;int deadline[maxn];int cost[maxn];string name[maxn];const int INF = 0x3fffffff;set
ans;struct node { int time, score, pre, now;};node dp[1<<15];set
::iterator it;int main() { int t; cin >> t; while( t-- ) { ans.clear(); memset(dp, 0, sizeof(dp)); int n; cin >> n; for( int i = 0; i < n; i++ ) { cin >> name[i] >> deadline[i] >> cost[i]; } int end = 1 << (n);// cout << end << endl; for( int s = 1; s < end; s++ ) { dp[s].score = INF; for( int i = n-1; i >= 0; i-- ) { int temp = 1 << i; if( temp & s ) { int past = s- temp; int st = dp[past].time + cost[i] - deadline[i]; if( st < 0 ) st = 0; if( st + dp[past].score < dp[s].score ) { dp[s].score = st + dp[past].score; dp[s].pre = past; dp[s].now = i; dp[s].time = dp[past].time + cost[i]; } } } } stack
S; int tem = end-1; cout << dp[tem].score << endl; while(tem) { S.push(dp[tem].now); tem = dp[tem].pre; } while(!S.empty()) { cout << name[S.top()] << endl; S.pop(); } } return 0;}
View Code

  思考: 自己一开始只知道是状压DP, 具体该怎么做还是不知道, 要接触各种DP

 

转载于:https://www.cnblogs.com/FriskyPuppy/p/7340616.html

你可能感兴趣的文章
jquery中ajax方法load get post与脚本文件如php脚本连接时,脚本怎样接受数据?
查看>>
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
查看>>
三种数据库访问——Spring3.2 + Hibernate4.2
查看>>
datasg中的数据的存储结
查看>>
iOS 多线程 之 GCD(大中枢派发)(一)
查看>>
[记]SAF 中缓存服务的实现
查看>>
pstool 的使用方法
查看>>
Email - Boss's concerns
查看>>
余世维 - 有效沟通
查看>>
mysql用户与权限管理笔记
查看>>
a里面不能嵌套a
查看>>
Myeclipse中打开接口实现类的快捷键
查看>>
浅谈React数据流管理
查看>>
<20190516> 一次比较糟糕的售后维修体验(某硕主板)
查看>>
iOS网络篇2-http协议通信规则
查看>>
删除sql dump中的AUTO_INCREMENT
查看>>
使用JdbcTemplate和JdbcDaoSupport
查看>>
Ruby-GNOME2 1.2.0 发布,支持 GTK+ 3
查看>>
C博客作业--指针
查看>>
版本12.2.0.1.0数据库,复制种子数据库快速创建租户数据库PDB
查看>>