[ACM] hdu 5045 Contest (减少国家Dp)
Contest
On Mars, there is programming contest, too. Each team consist of N students. The teams are given M hours to solve M programming problems. Each team can use only one computer, but they can’t cooperate to solve a problem. At the beginning of the ith hour, they
will get the ith programming problem. They must choose a student to solve this problem and others go out to have a rest. The chosen student will spend an hour time to program this problem. At the end of this hour, he must submit his program. This program is
then run on test data and can’t modify any more.
Now, you have to help a team to find a strategy to maximize the expected number of correctly solved problems.
For each problem, each student has a certain probability that correct solve. If the ith student solve the jth problem, the probability of correct solve is Pij .
At any time, the different between any two students’ programming time is not more than 1 hour. For example, if there are 3 students and there are 5 problems. The strategy {1,2,3,1,2}, {1,3,2,2,3} or {2,1,3,3,1} are all legal. But {1,1,3,2,3},{3,1,3,1,2} and
{1,2,3,1,1} are all illegal.
You should find a strategy to maximize the expected number of correctly solved problems, if you have know all probability
The first line of each case contains two integers N ,M (1 ≤ N ≤ 10,1 ≤ M ≤ 1000),denoting the number of students and programming problem, respectively.
The next N lines, each lines contains M real numbers between 0 and 1 , the jth number in the ith line is Pij .
strategy, to five digits after the decimal point. Look at the output for sample input for details.
1
2 3
0.6 0.3 0.4
0.3 0.7 0.9
Case #1: 2.20000
解题思路:
题意为有n个学生,m道题,已知每位学生对每一个题都有一个答对的可能性,要求一道题目仅仅能一个学生做。一个学生能够做多道。 且随意两个学生之间做的题目之差不能超过1,问m道题所有答对的最大可能性为多少。
n最大为10。所以最多有 0~(2的10次方-1)种状态,每一位代表一个学生。1表示答题。0表示不答题。
当dp[ i ] [ j ]代表前 i 道题,状态为 j 的所有答对最大可能性。状态为j,也就是二进制里面包含i个1,由于要选i个人答题。
比方 dp[ 2 ][ 4], 4 可能是1001 1100 0011 0101等。仅仅要包含2个1就能够。 n<=m的时候
状态转移方程为: dp [ i +1 ] [ j ]= max(dp[i+1][j], dp[i-1][ s] + p[ k ][ i ] ) s是一个状态,p[k][i]表示第k个人答对第i道题的可能性
从已知状态推未知状态。
n>m时。由于随意两个学生做的题目仅仅差不能超过1,所以 当全部学生都答过一道题以后,状态要从0開始, dp[i][ (1<<n)-1]已知。也就是dp[i][0]已知
參考:http://www.2cto.com/kf/201409/338936.html
代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int Max=(1<<10)+1;
double dp[1001][Max];//代表前i道题,状态为j做出来题目的最大期望
double p[11][1001];
int n,m;
int s;//最大状态 double solve()
{
double ans=-1.0;
dp[0][0]=0;
for(int i=0;i<m;i++)//第几道题
for(int j=0;j<s;j++)
{
if(dp[i][j]<0)//眼下该状态还没出现
continue;
for(int k=0;k<n;k++)//第几个人来做
{
if(!((1<<k)&j))//第k个人可选,也就是j的二进制第k位为0
{
int temps=j|(1<<k);
if(temps==(s-1))
temps=0;
dp[i+1][temps]=max(dp[i+1][temps],dp[i][j]+p[k][i]);
}
}
}
for(int i=0;i<s;i++)
if(ans<dp[m][i])
ans=dp[m][i];
return ans;
}
int main()
{
int t;scanf("%d",&t);
for(int ca=1;ca<=t;ca++)
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
scanf("%lf",&p[i][j]);
s=1<<n;
for(int i=0;i<=m;i++)
for(int j=0;j<s;j++)
dp[i][j]=-1.0;
double ans=solve();
printf("Case #%d: %.5lf\n",ca,ans);
}
return 0;
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
[ACM] hdu 5045 Contest (减少国家Dp)的更多相关文章
- hdu - 5045 - Contest(国家压缩dp)
意甲冠军:N个人M通过主打歌有自己的期望,每个问题发送人玩.它不能超过随机播放的次数1,追求最大业绩预期 (1 ≤ N ≤ 10,1 ≤ M ≤ 1000). 主题链接:pid=5045" ...
- HDU 5045 Contest(状压DP)
Problem Description In the ACM International Collegiate Programming Contest, each team consist of th ...
- HDU 4433 locker 2012 Asia Tianjin Regional Contest 减少国家DP
意甲冠军:给定的长度可达1000数的顺序,图像password像锁.可以上下滑动,同时会0-9周期. 每个操作.最多三个数字连续操作.现在给出的起始序列和靶序列,获得操作的最小数量,从起始序列与靶序列 ...
- hdu 5045 Contest(状态压缩DP)
题解:我们使用一个二位数组dp[i][j]记录进行到第i个任务时,人组合为j时的最大和(这里的j我们用二进制的每位相应一个人). 详细见代码: #include <iostream> #i ...
- [ACM] hdu 4405 Aeroplane chess (概率DP)
Aeroplane chess Problem Description Hzz loves aeroplane chess very much. The chess map contains N+1 ...
- HDU 5045 Contest
pid=5045">主题链接~~> 做题感悟:比赛时这题后来才写的,有点小尴尬.两个人商议着写写了非常久才写出来,I want to Powerful ,I believe me ...
- poj - 1170 - Shopping Offers(减少国家dp)
意甲冠军:b(0 <= b <= 5)商品的种类,每个人都有一个标签c(1 <= c <= 999),有需要购买若干k(1 <= k <=5),有一个单价p(1 & ...
- Light OJ 1406 Assassin`s Creed 减少国家DP+支撑点甚至通缩+最小路径覆盖
标题来源:problem=1406">Light OJ 1406 Assassin`s Creed 意甲冠军:向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路: ...
- Chapter06-Phylogenetic Trees Inherited(POJ 2414)(减少国家DP)
Phylogenetic Trees Inherited Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 480 Accepted ...
随机推荐
- 图像编程学习笔记1——bmp文件结构处理与显示
文本内容转载自<数字图像处理编程入门>,代码为自己实现 1.1图和调色板的概念 如今Windows(3.x以及95,98,NT)系列已经成为绝大多数用户使用的操作系统,它比DOS成功的一个 ...
- 2014辽宁省赛 Repeat Number
问题 C: Repeat Number 时间限制: 1 Sec 内存限制: 128 MB [cid=1073&pid=2&langmask=0">提交][状态][论坛 ...
- Company Story | Vistaprint
Company Story | Vistaprint Company Story A Gap in the Small Business Marketplace It’s rare that a hi ...
- Java NIO的性能
最近调研了一下mina和netty框架的性能,主要是想了解java nio在单机能支持多少长连接. 首先,mina的qq群有同学反映说单机支持3w长连接是没问题的 其次,http://amix.dk/ ...
- hello MemSQL 入门安装演示样例
一,介绍 MemSQL号称世界上最快的分布式关系型数据库,兼容mysql但快30倍,能实现每秒150万次事务.原理是仅用内存并将SQL预编译为C++. 二,部署 官网下载地址:http://www.m ...
- (step6.1.4)hdu 1102(Constructing Roads——最小生成树)
题目大意:输入一个整数n,表示村庄的数目.在接下来的n行中,每行有n列,表示村庄i到村庄 j 的距离.(下面会结合样例说明).接着,输入一个整数q,表示已经有q条路修好. 在接下来的q行中,会给出修好 ...
- Devstack: A copy of worked local.conf I'm sharing with you.
service_plugins = neutron.services.firewall.fwaas_plugin.FirewallPlugin [service_providers] service_ ...
- BCM wifi分析
一个:载入中wifi驱动模块 在hardware/libhardware_legacy/wifi/wifi.c调用函数 insmod(DRIVER_MODULE_PATH, DRIVER_MODULE ...
- 自己动手写了第三阶段的处理器——教学OpenMIPS处理器蓝图
我们会继续上传新书<自己动手写处理器>(未公布).今天是第十条.我每星期试试4 从本章開始将一步一步地实现教学版OpenMIPS处理器.本章给出了教学版OpenMIPS的系统蓝图,首先介绍 ...
- C++:抽象基类和纯虚函数的理解
转载地址:http://blog.csdn.net/acs713/article/details/7352440 抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层. ...