hdu - 5045 - Contest(国家压缩dp)
意甲冠军: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个地分块,为了让当前块加上上一个分块的结果。则要将上一个分块完毕时的结果存入当前块要利用的初始状态的结果。即:
if (nState == (1 << N) - 1)
{
nState = 0;
}
上代码:
#include <cstdio>
#include <cstring>
#include <algorithm> using std::max; const int MAXN = 10;
const int MAXM = 1000 + 5; int N, M;
double fSolve[MAXN + 1][MAXM];
double dp[MAXM][1 << MAXN];
double fRet; void Read()
{
scanf("%d%d", &N, &M);
for (int i = 1; i <= N; ++i)
{
for (int j = 1; j <= M; ++j)
{
scanf("%lf", &fSolve[i][j]);
}
}
} int CalOnes(int nNum)
{
int nRet = 0; while (nNum)
{
if (nNum & 1)
{
nRet++;
}
nNum >>= 1;
} return nRet;
} void Dp()
{
fRet = 0.0;
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= M; ++i)
{
for (int j = 0; j < (1 << N); ++j)
{
for (int k = 1; k <= N; ++k)
{
if (j & (1 << (k - 1))) continue;
if (CalOnes(j) != (i - 1) % N) continue;
int nState = j | (1 << (k - 1));
if (nState == (1 << N) - 1)
{
nState = 0;
}
dp[i][nState] = max(dp[i][nState], dp[i - 1][j] + fSolve[k][i]);
if (i == M)
{
fRet = max(fRet, dp[i][nState]);
}
}
}
}
} int main()
{
int T, nCase = 0; scanf("%d", &T);
while (T--)
{
Read();
Dp();
printf("Case #%d: %.5f\n", ++nCase, fRet);
} return 0;
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
hdu - 5045 - Contest(国家压缩dp)的更多相关文章
- hdu 5045 Contest(状态压缩DP)
题解:我们使用一个二位数组dp[i][j]记录进行到第i个任务时,人组合为j时的最大和(这里的j我们用二进制的每位相应一个人). 详细见代码: #include <iostream> #i ...
- HDU 5045 Contest(状压DP)
Problem Description In the ACM International Collegiate Programming Contest, each team consist of th ...
- hdu 5094 Maze 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...
- Hdu-1565 电网接入(1) (国家压缩dp获得冠军
正方形格通路(1) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 3001(状态压缩dp)
状态压缩dp的第一题! 题意:Mr ACMer想要进行一次旅行,他决定访问n座城市.Mr ACMer 可以从任意城市出发,必须访问所有的城市至少一次,并且任何一个城市访问的次数不能超过2次.n座城市间 ...
- hdu 4856 Tunnels 状态压缩dp
Tunnels Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- HDU 3001【状态压缩DP】
题意: 给n个点m条无向边. 要求每个点最多走两次,要访问所有的点给出要求路线中边的权值总和最小. 思路: 三进制状态压缩DP,0代表走了0次,1,2类推. 第一次弄三进制状态压缩DP,感觉重点是对数 ...
- [ACM] hdu 5045 Contest (减少国家Dp)
Contest Problem Description In the ACM International Collegiate Programming Contest, each team consi ...
- HDU 5045 Contest
pid=5045">主题链接~~> 做题感悟:比赛时这题后来才写的,有点小尴尬.两个人商议着写写了非常久才写出来,I want to Powerful ,I believe me ...
随机推荐
- [置顶] 关于redhat系统yum源的配置2
(二)配置yum源(官方) 1.在终端输入以下命令(RHEL6/CentOS6) wget http://lug.ustc.edu.cn/wiki/_export/code/mirrors/help/ ...
- UVA11324-- The Largest Clique(SCC+DP)
题目链接 题意:给出一张有向图,求一个结点数最大的结点集,使得该结点集中随意两个结点u和v满足:要么u能够到到v,要么v能够到达u(u和v能够互相到达) 思路:我们能够缩点,用Tarjan求出全部强连 ...
- [C#基础] 泛型
为什么泛型? 在泛型中,最重要的应用便是集合类,因此我们模拟一个简单的集合类 对于上述示例,可以有如下应用 从上可看出,自定义的代码太丑陋了,只能用于string类型. 当然我们可以用object作为 ...
- Vim -> 边确认边查找替换
进行简单的全局查找替换的时候,能够使用ex的例如以下命令 :%s/which/what/g 它的使用方法比較简单 % 表示每一行(everyline) s 替换(substitue) which 查找 ...
- 关于jdbc注冊驱动的那点事
看到非常多人写jdbc连接工具类的时候,都会写到Class.forName()去显示载入类,一写错点点就会抛出ClassNotFoundException,关于显示载入类,究竟会不会产生作用呢? 參考 ...
- ExtJs选择器
想要利用ExtJS的库函数对DOM进行各类操作,就要得到Element类型的对象,但是Ext.get()取到的虽然是Element,但是参数只能是id,如果大家对jQuery的selector方式很喜 ...
- hdu4635(强连通缩点)
传送门:Strongly connected 题意:求最多可以加多少边,使得最新的图还不是强连通图. 分析:最终添加完边的图,肯定可以分成两个部X和Y,其中只有X到Y的边没有Y到X的边,那么要使得边数 ...
- (二十一)unity4.6学习Ugui中文文档-------交互-Supported Events & Raycasters
大家好,我是孙广东. 转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:mod=guide&view=m ...
- Domain Model(领域模型)
Domain Model(领域模型) 上一篇:<DDD 领域驱动设计-如何 DDD?> 开源地址:https://github.com/yuezhongxin/CNBlogs.Apply. ...
- Cocos2dx项目启程二 之 封装属于我的按钮类
不知道为什么,很讨厌cocos2dx的 各菜单类,比如按钮:如果一张图片上就已经有按钮的几个状态了,我还是要创建多张资源图片, 最起码要指定这张图片上哪块区域是这个普通状态,哪块区域是那个选中状态.. ...