hdu 1074 doing homework
来源:互联网 发布:淘宝记录怎么删除 编辑:程序博客网 时间:2024/05/13 17:51
思路:纪录每个状态的最小花费dp[i] 然后转移 转移的时候要用到位运算 用1<<j表示第j个课程的选择 i&(<span style="font-family: Arial, Helvetica, sans-serif;">1<<j)检测是否由dp[i-(</span><span style="font-family: Arial, Helvetica, sans-serif;">1<<j</span><span style="font-family: Arial, Helvetica, sans-serif;">)]转移而来 然后全部取最小的 ,但是这个地方的转移顺序很需要注意! 选择j的时候要n-1 to 0 因为要用字典序最小的状态转移而来 所以字典序排序应该是j越大 之前的状态字典序越小 </span>
#include <iostream> #include <string> #include <cstring> #include <stack> #include <algorithm> using namespace std; const int inf = 1<<30; struct node { string name; int dead,cost; } a[50]; struct kode { int time,score,pre,now; } dp[1<<15]; int main() { int t,i,j,s,n,end; cin >> t; while(t--) { memset(dp,0,sizeof(dp)); cin >> n; for(i = 0; i<n; i++) cin >> a[i].name >> a[i].dead >> a[i].cost; end = 1<<n; for(s = 1; s<end; s++) { dp[s].score = inf; for(i = n-1; i>=0; i--) // 此处转移应该注意顺序 n-1 to 0<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
{ int tem = 1<<i; if(s & tem) { int past = s-tem; int st = dp[past].time+a[i].cost-a[i].dead; if(st<0) st = 0; if(st+dp[past].score<dp[s].score) { dp[s].score = st+dp[past].score; dp[s].now = i; dp[s].pre = past; dp[s].time = dp[past].time+a[i].cost; } } } } stack<int> 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 << a[S.top()].name << endl; S.pop(); } } return 0; }
0 0
- HDU 1074 Doing Homework
- hdu 1074 Doing Homework
- HDU-1074-Doing Homework
- hdu 1074 Doing Homework
- hdu 1074 Doing Homework
- hdu-1074-Doing Homework
- HDU - 1074 Doing Homework
- HDU 1074 Doing Homework
- HDU 1074 Doing Homework
- hdu-1074 Doing Homework
- HDU 1074 Doing Homework
- hdu 1074 Doing Homework
- HDU 1074Doing Homework
- HDU-1074-Doing Homework
- hdu 1074 doing homework
- HDU 1074 Doing Homework
- HDU 1074 Doing Homework
- hdu 【1074】Doing Homework
- Sublime Text 使用技巧
- ava包装类型的MAX_VALUE到底是多少啊
- Java之JVM虚拟机理解和实例
- 修改源码,自定义chromium启动页
- 2.1.4 uboot的工作方式
- hdu 1074 doing homework
- 推荐几种PHP实现页面跳转的方法
- PopupWindow的二级菜单的简单demo
- 记录脑残失误,让达摩克利斯之剑永远高悬
- 1026. 程序运行时间(15)
- Tomcat下log4j设置文件路径和temp目录
- 350. Intersection of Two Arrays II
- 网格细分算法(Catmull-Clark subdivision & Loop subdivision)附源码
- 文件的拆分与合并