hdu--4800--dp

一共就2种状态的转移

当我们将状态从x转移到Y的时候 可以选择 换队员 或者不换队员 但是有一点要注意 如果要换队员只能是最新的 也就是刚结束的比赛

而且 不管换不换 比赛场次总是增加了一场 我们总是从(x-1)---->x  这也是符合逻辑的 一定要先进行第(x-1)场的比赛 才能进行第x场的比赛

dp[x,y]表示当前进行到第x场比赛的时候 我是以y为编号在进行<注意 因为这边要求比赛一定要按照顺序打完 所以也就是说打完第n场 就是所有的比赛都打完了>

dp[x][y] = max( dp[x][y] , dp[x-1][y]*p[y][ team[x] ); //不更换

dp[x][y] = max( dp[x][ team[x] ] , dp[x-1][y]*p[y][ team[x] ] );//更换

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4
 5 int n , m;
 6 const int size = 300;
 7 double dp[10010][size];
 8 double p[size][size];
 9 int team[10010];
10
11 void solve( )
12 {
13     for( int i = 0 ; i<=m ; i++ )
14         dp[0][i] = 1.0;
15     for( int i = 1 ; i<=n ; i++ )
16     {
17         for( int j = 0 ; j<m ; j++ )
18         {
19             dp[i][j] = max( dp[i][j] , dp[i-1][j]*p[j][ team[i] ]);
20             dp[i][ team[i] ] = max( dp[i][ team[i] ] , dp[i-1][j]*p[j][ team[i] ] );
21         }
22     }
23 }
24
25 int main()
26 {
27     double ans;
28     while( ~scanf("%d",&m) )
29     {
30         m = m * (m-1) * (m-2) / 6;
31         for( int i = 0 ; i<m ; i++ )
32         {
33             for( int j = 0 ; j<m ; j++ )
34             {
35                 scanf("%lf",&p[i][j]);
36             }
37         }
38         scanf("%d",&n);
39         for( int i = 1 ; i<=n ; i++ )
40         {
41             scanf("%d",&team[i]);
42         }
43         memset( dp , 0 , sizeof(dp) );
44         solve( );
45         ans = 0;
46         for( int i = 0 ; i<m ; i++ )
47         {
48             ans = max( ans , dp[n][i] );
49         }
50         printf("%.6lf\n",ans);
51     }
52     return 0;
53 }

today:

  糟糕透了

  ffffffffk

  

时间: 2024-08-09 02:20:22

hdu--4800--dp的相关文章

HDU 4832(DP+计数问题)

HDU 4832 Chess 思路:把行列的情况分别dp求出来,然后枚举行用几行,竖用几行,然后相乘累加起来就是答案 代码: #include <stdio.h> #include <string.h> #include <iostream> using namespace std; typedef long long ll; const ll MOD = 9999991; const int N = 1005; int t, n, m, k, x, y; ll dp1

hdu 3944 dp?

DP? Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 128000/128000 K (Java/Others)Total Submission(s): 1804    Accepted Submission(s): 595 Problem Description Figure 1 shows the Yang Hui Triangle. We number the row from top to bottom 0,1,2,-a

hdu 5389 dp类似背包

http://acm.hdu.edu.cn/showproblem.php?pid=5389 Problem Description Zero Escape, is a visual novel adventure video game directed by Kotaro Uchikoshi (you may hear about ever17?) and developed by Chunsoft. Stilwell is enjoying the first chapter of this

hdu 1025 dp 最长上升子序列

1 //Accepted 4372 KB 140 ms 2 //dp 最长上升子序列 nlogn 3 #include <cstdio> 4 #include <cstring> 5 #include <iostream> 6 using namespace std; 7 const int imax_n = 500005; 8 int dp[imax_n]; 9 int d[imax_n]; 10 int a[imax_n]; 11 int n; 12 int len

HDU 5928 DP 凸包graham

给出点集,和不大于L长的绳子,问能包裹住的最多点数. 考虑每个点都作为左下角的起点跑一遍极角序求凸包,求的过程中用DP记录当前以j为当前末端为结束的的最小长度,其中一维作为背包的是凸包内侧点的数量.也就是 dp[j][k]代表当前链末端为j,其内部点包括边界数量为k的最小长度.这样最后得到的一定是最优的凸包. 然后就是要注意要dp[j][k]的值不能超过L,每跑一次凸包,求个最大的点数量就好了. 和DP结合的计算几何题,主要考虑DP怎么搞 /** @Date : 2017-09-27 17:27

HDU 4901 DP背包

给你n个数,问你将数分成两个数组,S,T ,T 中所有元素的需要都比S任意一个大,问你S中所有元素进行 XOR 操作和 T 中所有元素进行 &操作值相等的情况有多少种. DP背包思路 dpa[i][j][0]  表示从左开始到i,不取i,状态为j的方案数 dpa[i][j][1]  表示从作开始到i,取i,状态为j的方案数 dpb[i][j]      表示从右开始到i,状态为j的方案数 因为S集合一定在T集合的左边,那么可以枚举集合的分割线,并且枚举出的方案要保证没有重复,如果要保证不重复,只

HDU 4800 &amp; ZJU 3735 Josephina and RPG(状压dp)

题目链接: ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5081 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and sometimes roleplaying game) is a game in which players assume the roles of c

HDU 4800 Josephina and RPG(动态规划)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4800 题面: Josephina and RPG Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1077    Accepted Submission(s): 320 Special Judge Problem Description A

Bone Collector II(HDU 2639 DP)

Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3471    Accepted Submission(s): 1792 Problem Description The title of this problem is familiar,isn't it?yeah,if you had took par

hdu 4472 dp

http://acm.hdu.edu.cn/showproblem.php?pid=4472 第一直觉找规律,第二直觉 把树拆成子树,然后递推或者DP 然后发现不行,然后才发现自己题都没读,,,, dp[i]=segma(dp[j] | (i-1)%j==0) #include <cstdio> #include <cstring> #include <cstring> const int MAXN = 1000+50; const int MOD = 1e9+7; #