zoukankan      html  css  js  c++  java
  • zoj 3471 状压DP

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4257

    难度远不及我之前发的...

    可是我第一次的思路居然错了,由于dp方程想设计成二维,可是弄错。也没发现原因。,。

    改为一维:dp[s]:状态为s的时候,得到的最大能量,当中s第i位为1表示,i已经被撞毁

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <string>
    #include <iostream>
    #include <cmath>
    #include <map>
    #include <queue>
    using namespace std;
    
    #define ls(rt) rt*2
    #define rs(rt) rt*2+1
    #define ll long long
    #define rep(i,s,e) for(int i=s;i<e;i++)
    #define repe(i,s,e) for(int i=s;i<=e;i++)
    #define CL(a,b) memset(a,b,sizeof(a))
    #define IN(s) freopen(s,"r",stdin)
    #define OUT(s) freopen(s,"w",stdout)
    
    const int MAXN = 12;
    int n;
    int mat[MAXN][MAXN];
    int dp[1<<MAXN];
    int scnt;
    
    void init()
    {
        CL(mat,0);
        CL(dp,0);
    }
    
    
    int main()
    {
        //IN("zoj3471.txt");
        int w;
        while(~scanf("%d",&n) && n)
        {
            init();
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                {
                    scanf("%d",&w);
                    mat[i][j]=max(mat[i][j],w);
                }
            int S=1<<n;
            int ans=0;
            for(int s=0;s<S;s++)
            {
                for(int i=0;i<n;i++)
                {
                    if((s&(1<<i)))continue;//i不在s
                    //if(s == (1<<i))dp[s][i]=0;
                   // else
                    for(int j=0;j<n;j++)
                    {
                        if(i == j)continue;
                        if(!(s&(1<<j)) || !mat[i][j])continue;//j在s,但<span style="font-family: Arial, Helvetica, sans-serif;">dp[s^(1<<j)]中j不在s</span>
                        dp[s]=max(dp[s],dp[s^(1<<j)]+mat[i][j]);//用i撞j
                        //ans=max(dp[s][i],ans);
                    }
                }
    
            }
            for(int s=0;s<S;s++)
                    ans=max(dp[s],ans);
            printf("%d
    ",ans);
        }
        return 0;
    }
    


  • 相关阅读:
    Android Apk获取包名和Activity名称
    SoupUI接口测试学习分享
    Android 手机自动化测试工具有哪几种?
    SVN和CVS的区别
    名词
    本地解析地址步骤
    python3.6.1+selenium3.0环境安装问题及解决方法
    简述企业信息化与企业架构关系
    企业架构实践的线下公开课学习感悟
    golang 12.9 go mod 实践
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6718089.html
Copyright © 2011-2022 走看看