• zoj 3471Most Powerful


      题意:给n个atom(原子),每两个原子相碰会产生能量,不过每次碰撞会消失一个原子,而且不同原子碰撞,消失的原子不同,产生的能量也会不同,给出不同原子相碰撞产生的能量,求出能产生的最多能量。

      状态DP

      状态s表示n个原子的状态。

      每次碰撞只消失一个原子,最后会剩下一个原子不消失,最终的答案是max(dp[(1<<n-1)^(1<<i)]),i 表示最后剩下的原子。

      状态转移方程是: i 是 s 中消失的原子,j 是没有消失的原子 dp[s]=max(dp[s^(1<<i)]+map[j][i])

    #include<stdio.h>
    #include<string.h>
    #define max(a,b)    (a)>(b)?(a):(b)
    
    int n;
    int dp[1<<10],map[12][12];
    int DP(int s)
    {
        if(dp[s]!=-1)   return dp[s];
        for(int i=0;i<n;i++)
        {
            if(!(s&(1<<i))) continue;
            for(int j=0;j<n;j++)
            {
                if(s&(1<<j))    continue; 
                dp[s]=max(dp[s],DP(s^(1<<i))+map[j][i]);  
            }
        }
        return dp[s];
    }
    int main()
    {
        while(scanf("%d",&n) && n)
        {
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    scanf("%d",&map[i][j]);
            memset(dp,-1,sizeof(dp));
            dp[0]=0;
            int ans=0,all=(1<<n)-1;
            for(int i=0;i<n;i++)
                ans=max(ans,DP(all^(1<<i)));
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    初识DJango框架
    web框架基础
    前端——JavaScript
    前端——css(下)
    前端——css(上)
    前端——html
    spring注解
    spring boot 详解(1)spring boot +mybatis+mysql+jsp
    spring 事务控制
    maven pom文件管理
  • 原文地址:https://www.cnblogs.com/yongren1zu/p/3268796.html
Copyright © 2020-2023  润新知