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 ...
随机推荐
- windows下eclipse跑junit报错:CreateProcess error=206
from:http://isuifengfei.iteye.com/blog/1684262 windows下,eclipse中运行junit出现错误提示: Exception occurred ex ...
- ORM增删改查询例题
public partial class Form1 : Form { private MydbInfoDataContext context = new MydbInfoDa ...
- 与众不同 windows phone (21) - Device(设备)之摄像头(拍摄照片, 录制视频)
原文:与众不同 windows phone (21) - Device(设备)之摄像头(拍摄照片, 录制视频) [索引页][源码下载] 与众不同 windows phone (21) - Device ...
- Setup SSH and SVN on Windows Server
cygwin: install sshd, cygrunsrv http://lifehacker.com/205090/geek-to-live--set-up-a-personal-home-ss ...
- Xamarin 安装教程 支持Visual Studio 2013
本文的前提是你已经正确的安装了VS 2013. 本文的全部步骤在Win7 Ultimate 64系统上測试通过.支持VS 2013,我用的版本号是VS 2013 update2. 安装 1. ...
- 《转》Python多线程学习
原地址:http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html 一.Python中的线程使用: Python中使用线程有两种方式 ...
- C语言数据结构----递归的应用(八皇后问题的具体流程)
本节主要讲八皇后问题的基本规则和递归回溯算法的实现以及具体的代码实现和代码分析. 转载请注明出处.http://write.blog.csdn.net/postedit/10813257 一.八皇后问 ...
- Servlet(二)GenericServlet
以GenericServlet创建Servlet 1.在FirstServlet同文件夹下建立GServlet.java package com.hunhun; import javax.servle ...
- cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第八部---怪物出场
/* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写.第一别全然照搬代码.第二能够说 ...
- OpenStack 中的neutron-server启动过程
neutron-server是neutron的核心组件之中的一个.负责直接接收外部请求,然后调用后端对应plugin进行处理. 其核心启动过程代码主要在neutron.server包中. __init ...