首页 > 代码库 > HDU 5045 DP+状压
HDU 5045 DP+状压
2014 ACM/ICPC Asia Regional Shanghai Online
给出N个人做M道题的正确率,每道题只能由一个人做出,并且当所有人都做出来且仅做出一道题时,做过题的人才可以继续做题,求最大期望。
一共只有10个人,状压存储每个人是否已经做出题目,如果都作出则状态清0;
#include "stdio.h" #include "string.h" double Max(double a,double b) { if (a<b) return b;else return a; } double ans,dp[1010][1050],a[1010][1010]; int main() { int Case,ii,i,j,aim,k,n,m,peo; scanf("%d",&Case); for (ii=1;ii<=Case;ii++) { scanf("%d%d",&n,&m); for (i=1;i<=n;i++) for (j=1;j<=m;j++) scanf("%lf",&a[i][j]); printf("Case #%d: ",ii); aim=(1<<n)-1; for (i=0;i<=m;i++) for (j=0;j<=aim;j++) dp[i][j]=-1; dp[0][0]=0; for (j=1;j<=m;j++) for (i=0;i<=aim;i++) if (dp[j-1][i]!=-1) for (k=1;k<=n;k++) { peo=1<<(k-1); if ((i&peo)==peo) continue; peo|=i; if (peo==aim) peo=0; dp[j][peo]=Max(dp[j][peo],dp[j-1][i]+a[k][j]); } ans=0; for (i=0;i<=aim;i++) ans=Max(ans,dp[m][i]); printf("%.5lf\n",ans); } }
HDU 5045 DP+状压
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。