NYOJ832 合并游戏(简单状压DP)
Posted djh0709
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NYOJ832 合并游戏(简单状压DP)相关的知识,希望对你有一定的参考价值。
AC代码:
#include<stdio.h> #include<string.h> #define max(a,b) (((a)>(b))?(a):(b)) int dp[10000],a[12][12],n; int dj(int x){ int i,j,temp,Mx=0,mx; if(dp[x]!=-1) return dp[x]; //搜过的状态要标记, 这要注意!! 不写的话会超时 if(x==0) return 0; for(i=0;i<n;i++){ mx=0; if(x&(1<<i)){//枚举所有可以合并的石子, 第i+1个 int temp=x-(1<<i);//合并完的状态, for(j=0;j<n;j++){ if(temp&(1<<j))//枚举所有可以与第i+1个石子合并的石子, mx=max(a[j+1][i+1],mx); } Mx=max(Mx,dj(temp)+mx); } } dp[x]=Mx; return dp[x]; } int main(){ int i,j,ans; while(scanf("%d",&n)!=EOF){ for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&a[i][j]); memset(dp,-1,sizeof(dp)); ans=dj((1<<n)-1); printf("%d ",ans); } }
以上是关于NYOJ832 合并游戏(简单状压DP)的主要内容,如果未能解决你的问题,请参考以下文章