码迷,mamicode.com
首页 > 其他好文 > 详细

[2016-03-28][HDU][1074][Doing Homework]

时间:2016-04-01 23:21:06      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

  • 时间:2016-03-28 18:46:36 星期一

  • 题目编号:[2016-03-28][HDU][1074][Doing Homework]

  • 题目大意:给定n门科作业的期限时间和完成耗时,每科每超过一天就扣一份,求最少扣分数

  • 分析:n只有15,二进制枚举,状态压缩,枚举每种科目完成的状态,更新下一个状态,求最小值

    1. #include <cstring>
    2. #include <cstdio>
    3. using namespace std;
    4. const int maxstu = 1 << 16;
    5. struct Cource{
    6. char name[20];
    7. int d,c;
    8. }a[16];
    9. struct mstatus{
    10. int pre,cost,reduced,id;
    11. mstatus(int a = 0,int b = 0,int c = 0,int d = 0):cost(a),reduced(b),pre(c),id(d){};
    12. }dp[maxstu];
    13. int vis[maxstu];
    14. void print(int cur){
    15. if(dp[cur].pre == 0){
    16. printf("%s\n",a[ dp[cur].id ].name);
    17. return ;
    18. }
    19. print(dp[cur].pre);
    20. printf("%s\n",a[ dp[cur].id ].name);
    21. }
    22. int main(){
    23. int T;
    24. scanf("%d",&T);
    25. while(T--){
    26. int n;
    27. scanf("%d",&n);
    28. for(int i = 0;i < n;++i){
    29. scanf("%s%d%d",a[i].name,&a[i].d,&a[i].c);
    30. }
    31. memset(vis,0,sizeof(vis));
    32. dp[0] = mstatus(0,0,0,0);
    33. for(int i = 0;i < (1 << n) - 1;++i){
    34. for(int j = 0;j < n;++j){
    35. int cur = 1 << j;
    36. if((cur & i) == 0){
    37. int curcost = dp[i].cost + a[j].c;
    38. int curreduced = dp[i].reduced + (curcost <= a[j].d?0:curcost - a[j].d);
    39. int nxtstatus = cur | i;
    40. if(vis[nxtstatus]){
    41. if(curreduced < dp[nxtstatus].reduced){
    42. dp[nxtstatus] = mstatus(curcost,curreduced,i,j);
    43. }
    44. }else {
    45. vis[nxtstatus] = 1;
    46. dp[nxtstatus] = mstatus(curcost,curreduced,i,j);
    47. }
    48. }
    49. }
    50. }
    51. int ans = dp[(1 << n) - 1].reduced;
    52. printf("%d\n",ans);
    53. print((1 << n) - 1);
    54. }
    55. return 0;
    56. }




[2016-03-28][HDU][1074][Doing Homework]

标签:

原文地址:http://www.cnblogs.com/qhy285571052/p/f6076d08ccffb442cb4b8f437e2d76cf.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!