zoukankan      html  css  js  c++  java
  • 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\n",ans);	
    	}	
    }
    

      

  • 相关阅读:
    C# 类 (7)
    C# 类 (6) -继承
    C# 类 (5)
    c# 类(4)
    C# 类(3)
    c# 类(2)
    C# 类 (1)
    C# 零碎知识点
    VINS_Fusion 初始化过程
    视觉SLAM(一)预备课程与基础知识
  • 原文地址:https://www.cnblogs.com/djh0709/p/9588477.html
Copyright © 2011-2022 走看看