hdu 5045 - Contest(2014 ACM/ICPC Asia Regional Shanghai Online )概率dp

原创 2015年07月10日 11:24:41

Contest
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 974 Accepted Submission(s): 416

Problem Description
In the ACM International Collegiate Programming Contest, each team consist of three students. And the teams are given 5 hours to solve between 8 and 12 programming problems.

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

Input
The first line of the input is T (1 ≤ T ≤ 20), which stands for the number of test cases you need to solve.

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 .

Output
For each test case, print a line “Case #t: ”(without quotes, t means the index of the test case) at the beginning. Then a single real number means the maximal expected number of correctly solved problems if this team follow the best strategy, to five digits after the decimal point. Look at the output for sample input for details.

Sample Input

1
2 3
0.6 0.3 0.4
0.3 0.7 0.9

Sample Output

Case #1: 2.20000
题意:n个学生m道题,一个n*m的矩阵代表第n个学生解第m题AC的概率,任意两学生做题数差距不能大于1,问AC所有题目概率的最大值
思路:dp[i][j]表示前i个题,学生做题数的状态为j的最大概率,因为最大只能查一题,那么当j全1时,就清空j变成0

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
const int maxn=11;
const int maxm=1050;
int N,M;
double P[maxn][maxm];
double dp[maxm][maxm];
int main()
{
    int T,cas=1;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&N,&M);
        for(int i=0;i<N;i++)
            for(int j=0;j<M;j++)scanf("%lf",&P[i][j]);
        for(int i=0;i<maxm;i++)
            for(int j=0;j<maxm;j++)dp[i][j]=-1.0;
        dp[0][0]=0;
        int S=(1<<N);
        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(!(j&(1<<k)))
                    {
                        int tmp=(j|(1<<k));
                        if(tmp==(S-1))tmp=0;
                        dp[i+1][tmp]=max(dp[i+1][tmp],dp[i][j]+P[k][i]);
                    }
                }
            }
        }
        double ans=0;
        for(int i=0;i<S;i++)
            ans=max(ans,dp[M][i]);
        printf("Case #%d: %.5lf\n",cas++,ans);
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

hdu 5045 Contest 2014 ACM/ICPC Asia Regional Shanghai Online 网络流

题目链接:hdu 5045         有n个人

HDU4021 24 Puzzle The 36th ACM/ICPC Asia Regional Shanghai Site —— Online Contest

24 Puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total S...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

hdu 5047 Sawtooth 2014 ACM/ICPC Asia Regional Shanghai Online 数学

题目链接:hdu 5047         问n个

hdu 5052 Yaoge’s maximum profit 树链剖分 2014 ACM/ICPC Asia Regional Shanghai Online

题意: 给定n个点构成的树,每个点都有点权。 下面n行给出每个点点权表示每个点买卖鸡腿的价格 下面n-1行给出树边 下面Q个操作 Q行 u, v, val 从u走到v,过程中可以买一个鸡...

hdu 5047 Sawtooth 2014 ACM/ICPC Asia Regional Shanghai Online

这一题就是推公式+copy的大数模板 一个M有4条

zoj3822 Domination (The 2014 ACM-ICPC Asia Mudanjiang Regional Contest D题)概率dp

题意: 思路:

HDU 4405 Aeroplane chess (概率DP)——2012 ACM/ICPC Asia Regional Jinhua Online

传送门 Aeroplane chessTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe...

hdu 5477(2015 ACM/ICPC Asia Regional Shanghai Online)

啦啦啦,经常爆零的帕斯喵又来切题了。   Problem Description Master Di plans to take his girlfriend for a travel by b...

hdu 5478(2015 ACM/ICPC Asia Regional Shanghai Online )

今天,帕斯喵学了一下数字逻辑,发现题目完全不会做()看来帕斯喵还是太笨了。 于是呢,帕斯喵又来切题了。 Problem Description Given a prime number C(1≤...

2015 ACM/ICPC Asia Regional Shanghai Online --HDU 5478

一道数学题里面的水题—-快速幂+数学推理 然而也是看了别人的想法才A掉的。为以后的这类型的题提供一个思路: a^(k1⋅n+b1) + b^(k2⋅n−k2+1)=0 (%c) n=1时 ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)