意甲冠军:N个人M通过主打歌有自己的期望,每个问题发送人玩。它不能超过随机播放的次数1,追求最大业绩预期 (1 ≤ N ≤ 10,1 ≤ M ≤ 1000)。

主题链接:

pid=5045" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=5045

——>>设dp[i][j]表示已出战了前i - 1道题目,已出战的人的状态序列为j,如今要做第i道题目的最大期望。则最后要求的结果为max{dp[M][k]}。。

状态转移方程:dp[i][nState] = max(dp[i][nState], dp[i - 1][j] + fSolve[k][i]);

将M进行N个N个地分块,为了让当前块加上上一个分块的结果。则要将上一个分块完毕时的结果存入当前块要利用的初始状态的结果。即:

  1. if (nState == (1 << N) - 1)
  2. {
  3. nState = 0;
  4. }

上代码:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4.  
  5. using std::max;
  6.  
  7. const int MAXN = 10;
  8. const int MAXM = 1000 + 5;
  9.  
  10. int N, M;
  11. double fSolve[MAXN + 1][MAXM];
  12. double dp[MAXM][1 << MAXN];
  13. double fRet;
  14.  
  15. void Read()
  16. {
  17. scanf("%d%d", &N, &M);
  18. for (int i = 1; i <= N; ++i)
  19. {
  20. for (int j = 1; j <= M; ++j)
  21. {
  22. scanf("%lf", &fSolve[i][j]);
  23. }
  24. }
  25. }
  26.  
  27. int CalOnes(int nNum)
  28. {
  29. int nRet = 0;
  30.  
  31. while (nNum)
  32. {
  33. if (nNum & 1)
  34. {
  35. nRet++;
  36. }
  37. nNum >>= 1;
  38. }
  39.  
  40. return nRet;
  41. }
  42.  
  43. void Dp()
  44. {
  45. fRet = 0.0;
  46. memset(dp, 0, sizeof(dp));
  47. for (int i = 1; i <= M; ++i)
  48. {
  49. for (int j = 0; j < (1 << N); ++j)
  50. {
  51. for (int k = 1; k <= N; ++k)
  52. {
  53. if (j & (1 << (k - 1))) continue;
  54. if (CalOnes(j) != (i - 1) % N) continue;
  55. int nState = j | (1 << (k - 1));
  56. if (nState == (1 << N) - 1)
  57. {
  58. nState = 0;
  59. }
  60. dp[i][nState] = max(dp[i][nState], dp[i - 1][j] + fSolve[k][i]);
  61. if (i == M)
  62. {
  63. fRet = max(fRet, dp[i][nState]);
  64. }
  65. }
  66. }
  67. }
  68. }
  69.  
  70. int main()
  71. {
  72. int T, nCase = 0;
  73.  
  74. scanf("%d", &T);
  75. while (T--)
  76. {
  77. Read();
  78. Dp();
  79. printf("Case #%d: %.5f\n", ++nCase, fRet);
  80. }
  81.  
  82. return 0;
  83. }

版权声明:本文博主原创文章,博客,未经同意不得转载。

hdu - 5045 - Contest(国家压缩dp)的更多相关文章

  1. hdu 5045 Contest(状态压缩DP)

    题解:我们使用一个二位数组dp[i][j]记录进行到第i个任务时,人组合为j时的最大和(这里的j我们用二进制的每位相应一个人). 详细见代码: #include <iostream> #i ...

  2. HDU 5045 Contest(状压DP)

    Problem Description In the ACM International Collegiate Programming Contest, each team consist of th ...

  3. hdu 5094 Maze 状态压缩dp+广搜

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...

  4. Hdu-1565 电网接入(1) (国家压缩dp获得冠军

    正方形格通路(1) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. HDU 3001(状态压缩dp)

    状态压缩dp的第一题! 题意:Mr ACMer想要进行一次旅行,他决定访问n座城市.Mr ACMer 可以从任意城市出发,必须访问所有的城市至少一次,并且任何一个城市访问的次数不能超过2次.n座城市间 ...

  6. hdu 4856 Tunnels 状态压缩dp

    Tunnels Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem ...

  7. HDU 3001【状态压缩DP】

    题意: 给n个点m条无向边. 要求每个点最多走两次,要访问所有的点给出要求路线中边的权值总和最小. 思路: 三进制状态压缩DP,0代表走了0次,1,2类推. 第一次弄三进制状态压缩DP,感觉重点是对数 ...

  8. [ACM] hdu 5045 Contest (减少国家Dp)

    Contest Problem Description In the ACM International Collegiate Programming Contest, each team consi ...

  9. HDU 5045 Contest

    pid=5045">主题链接~~> 做题感悟:比赛时这题后来才写的,有点小尴尬.两个人商议着写写了非常久才写出来,I want to Powerful ,I believe me ...

随机推荐

  1. C++中出现的计算机术语1

    access labels(訪问标号) 类的成员能够定义为 private,这能够防止使用该类型的代码訪问该成员. 成员还能够定义为 public,这将使该整个程序中都可訪问成员.  address( ...

  2. QSqlDatabase::addDatabase第一次运行的时候,生成SQLite文件的同时会产生一个默认连接

    QSqlDatabase::addDatabase第一次运行的时候,生成SQLite文件的同时会产生一个默认连接: QSqlDatabase database = QSqlDatabase::addD ...

  3. Jar包转成Dll的方式(带嵌套的jar也能做) (转)

    研究很好几天,终于成功了.因为写了一个Java的项目,现在要求要改写成C#版本的.但是其中用到了svnkit,svnkit是java平台的.改写成C#的话,要使用SharpSVN,但是SharpSVN ...

  4. Apache Lucene

    1.Lucene  -全文搜索引擎 Apache Lucene 是一个基于Java的全文搜索引擎,利用它能够轻易的为Java软件添�全文搜索引擎的功能. Lucene最重要的工作是替文件的每个字索引, ...

  5. 扯谈网络编程之自己实现ping

    ping是基于ICMP(Internet Control Message Protocol)协议实现的.而ICMP协议是在IP层实现的. ping实际上是发起者发送一个Echo Request(typ ...

  6. hdu 3221 Brute-force Algorithm(高速幂取模,矩阵高速幂求fib)

    http://acm.hdu.edu.cn/showproblem.php?pid=3221 一晚上搞出来这么一道题..Mark. 给出这么一个程序.问funny函数调用了多少次. 我们定义数组为所求 ...

  7. ExtJS学习--------Ext.Element中的经常使用事件和其它重要的方法学习(实例)

    经常使用事件: 其它重要方法: 详细实例:(实例结果能够将相应的代码取消凝视进行測试) Ext.onReady(function(){ Ext.create('Ext.panel.Panel',{ t ...

  8. PHP SPL他们留下的宝石

    Rafael Dohms 上面的篇文章 让我为之惊艳,忍不住就翻译了下来,同一时候补充了部分内容. SPL,PHP 标准库(Standard PHP Library) ,此从 PHP 5.0 起内置的 ...

  9. Python基础 - 关键字

    前言 与C一样,python也有自己的关键字,关键字有特殊的意义,不能作为普通的变量名类名等用途 关键字列表 以python2.7.5为例,有如下关键字: and del from not while ...

  10. cocos2dx-3.0(1)------win7 32位android环境搭建

    參照链接http://blog.csdn.net/wonengxing/article/details/23601359 ----我的生活,我的点点滴滴!! 一. Android工具安装 1. 安装J ...