【DP】 HDU 5045 Contest 状压
2014-09-27 21:02
363 查看
必须按照循序写题 所以要给dp数组赋初值-1
每取满n个时要注意要使得now为零 以便下次取
每取满n个时要注意要使得now为零 以便下次取
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <string> #include <iostream> #include <algorithm> #include <sstream> #include <cmath> using namespace std; #include <queue> #include <stack> #include <vector> #include <deque> #include <set> #include <map> #include <time.h>; #define cler(arr, val) memset(arr, val, sizeof(arr)) #define IN freopen ("in.txt" , "r" , stdin); #define OUT freopen ("out.txt" , "w" , stdout); typedef long long LL; const int MAXN = 710;//点数的最大值 const int MAXM = 200006;//边数的最大值 const int INF = 0x3f3f3f3f; const int mod = 10000007; const int N=102010; double dp[1010][(1<<10)+10],p[15][1000+10]; int main() { // IN; int t,cas=1,n,m; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) scanf("%lf",&p[i][j]); for(int i=0;i<m+1;i++) for(int j=0;j<(1<<n)+10;j++) dp[i][j]=-1; dp[0][0]=0; double sum=0; for(int i=1; i<=m; i++) { for(int j=0; j<(1<<n)-1; j++) { for(int k=1; k<=n; k++) { int x=1<<(k-1); if(dp[i-1][j]<0) continue; if(x&j) continue; int now=x|j; if(now==(1<<n)-1) now=0; dp[i][now]=max(dp[i][now],dp[i-1][j]+p[k][i]); if(i==m) sum=max(sum,dp[i][now]); } } } printf("Case #%d: %.5lf\n",cas++,sum); } return 0; }
相关文章推荐
- HDU 5045 Contest(状压DP)
- 【DP】 HDU 5045 Contest 状压
- HDU 5045 Contest(状压DP或DFS)
- HDU 5045 Contest(状压DP)
- HDU - 5045 2014 ACM/ICPC Asia Regional Shanghai Online D - Contest (状压DP)
- HDU-5045 Contest(状压DP)
- Hdu 5045 Contest (2014 上海Online) (状态压缩dp)
- hdu 5045 Contest(dp)
- Hdu 5045 Contest (状态压缩dp)
- HDU-5045 Contest 状态压缩DP求期望
- hdu 5045 Contest(状态压缩DP)
- HDU 5045 Contest 状态压缩DP
- hdu 5045 - Contest(2014 ACM/ICPC Asia Regional Shanghai Online )概率dp
- hdu----(5045)Contest(数位dp)
- HDU 5045 - Contest(dp + 状压)
- hdu 5045 Contest dp+状态压缩 2014 ACM/ICPC Asia Regional Shanghai Online
- HDU 5045 Contest(概率dp,状态压缩,2014上海网络赛1004)
- hdu 5045 Contest 状态压缩dp
- hdu - 5045 - Contest(状态压缩dp)
- hdu 5045 状压dp