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

题意:给定有n门课的作业,每门课交作业有截止时间,和完成作业所花费的时间,如果超过规定时间完成,每超过一天就会扣1分,求一个做作业顺序要求扣的分数最少。

思路:因为数据最大是15,可以使用二进制来表示所有完成的状况,比如二进制位1001,代表第1和第4科目的作业完成,第2第3没有完成,那么从0到(1<<n)其二进制就是所有的状态了。首先枚举所有的状态,然后枚举每一门课,假如判断第i门课是否完成可以用1<< i & (当前状态)来判断,然后去更新上次的状态+上完这门课完成所花费的最小分数,dp记录状态路径,最后输出即可。

AC代码:

  1. #include<iostream>
  2. #include<vector>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<queue>
  7. #include<cstdio>
  8. #include<stack>
  9. #include<unordered_map>
  10. #define inf 0x3f3f3f3f
  11. using namespace std;
  12. typedef long long ll;
  13. const int maxn = (<<)+;
  14. struct node{
  15. string name;
  16. int end;
  17. int cost;
  18. }g[];
  19. struct node1{
  20. int time;
  21. int val;
  22. int last;
  23. int cur;
  24. }dp[maxn];
  25. int m,n;
  26. int main(){
  27. int t;
  28. cin>>t;
  29. while(t--){
  30. int n;
  31. scanf("%d",&n);
  32. memset(dp,,sizeof(dp));
  33. for(int i = ;i<=n;i++) {
  34. cin>>g[i].name ;
  35. cin>>g[i].end>>g[i].cost;
  36. }
  37. int up = <<n;
  38. for(int i = ;i<up;i++){
  39. dp[i].val = <<;//设置花费的最大值
  40. for(int j = n;j>=;j--){
  41. int temp = <<(j-);//枚举第j门课是否完成
  42. if(i & temp){//如果完成
  43. int last = i - temp;//last为完成第j门课作业之前的状态
  44. int s = dp[last].time + g[j].cost - g[j].end ;//完成第j门课所需要的花费
  45. if(s<) s = ;
  46. if(dp[last].val + s <dp[i].val ){//如果扣分少于当前的i状态,则进行更新
  47. dp[i].cur = j; //i状态最后完成的科目是j
  48. dp[i].val = dp[last].val + s;//更新到i状态扣的分数
  49. dp[i].time = dp[last].time + g[j].cost;//i更新到i状态的最小时间
  50. dp[i].last = last; //i状态的上一个状态进行更新
  51. }
  52. }
  53. }
  54. }
  55. stack<int> s;
  56. int temp = up - ;
  57. printf("%d\n",dp[temp].val);//up-1为完成的状态
  58. while(temp){
  59. s.push(dp[temp].cur);//把路径依次读入栈中
  60. temp = dp[temp].last;
  61. }
  62. while(!s.empty()){
  63. cout<<g[s.top()].name<<endl;
  64. s.pop();
  65. }
  66. }
  67. return ;
  68. }

HDU1074 Doing Homework(状压dp)的更多相关文章

  1. HDU1074 Doing Homework —— 状压DP

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1074 Doing Homework Time Limit: 2000/1000 MS (J ...

  2. hdu_1074_Doing Homework(状压DP)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意:给你n个课程(n<=15)每个课程有限制的期限和完成该课程的时间,如果超出时间,每超 ...

  3. HDU 1074 Doing Homework 状压dp(第一道入门题)

    Doing Homework Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  4. HDU 1074 Doing Homework (状压DP)

    Doing Homework Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  5. HDU 1074 Doing Homework 状压DP

    由于数据量较小,直接二进制模拟全排列过程,进行DP,思路由kuangbin blog得到,膜拜斌神 #include<iostream> #include<cstdio> #i ...

  6. kuangbin专题十二 HDU1074 Doing Homework (状压dp)

    Doing Homework Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  7. HDU1074:Doing Homework(状压DP)

    Doing Homework Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  8. HDU 1074 Doing Homework【状压DP】

    Doing Homework Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he ...

  9. 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 ...

  10. HDU 1074:Doing Homework(状压DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=1074 Doing Homework Problem Description Ignatius has just ...

随机推荐

  1. disabled属性对form表单提交的影响

    在form表单里,如果对input加入disabled="disabled"或disabled="true"等属性,form表单提交的时候,就不会传值到后台. ...

  2. Pikachu-URL重定向

    不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方.如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判 ...

  3. 网站后门shell-----eval

    我们先来看看网站被攻击的代码: <?php error_reporting(E_ERROR); unlink('user.php'); unlink('../member/login.php') ...

  4. Google Chrome 退出清除浏览数据

    版本 79.0.3945.88(正式版本) (64 位) 设置-高级-隐私设置和安全性-网站设置-Cookie和网站数据-退出Chrome时清除Cookie及网站数据.

  5. 安装Flink集群

    1.Windows安装 https://blog.csdn.net/clj198606061111/article/details/99694033 2.Linux安装 https://blog.cs ...

  6. 积分题1之来自G.Han的一道积分题

    今天,收到G.Han的提问,第一个是计算积分 \[\int_0^{\infty}{\frac{\ln x}{(x^2+1)^n}dx}\]顿时不明觉厉,然后在宝典<Table of Integr ...

  7. CSS 美化网页元素

    一.为什么使用CSS 1.有效的传递页面信息 2.使用CSS美化过的页面文本,使页面漂亮.美观,吸引用户 3.可以很好的突出页面的主题内容,使用户第一眼可以看到页面主要内容 4.具有良好的用户体验 二 ...

  8. AduSkin - UI

    追求极致,永臻完美 A Beautiful WPF Control UI 一款简单漂亮的WPF UI,融合部分开源框架的组件,为个人定制的UI,可供学者参考. Nuget 搜索"AduSki ...

  9. linux--后端项目部署

    nginx + uwsgi + crm + mysql + virtualenv + supervisor项目部署 1.后端整起,用uwsgi启动crm 2.创建一个新的虚拟环境,用于运行crm新业务 ...

  10. python开发第二篇 :python基础

    python基础a.Python基础      -基础1. 第一句python       -python后缀名可以任意?     -导入模块时如果不是.py文件,以后的文件后缀名是.py.2.两种 ...