• 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;
    }
    


  • 相关阅读:
    熔断器Hystrix
    面向对象
    基础语法
    为什么需要定义数据类型???
    集成Ribbon的客户端调用工具——Feign
    Ribbon实现客户端负载均衡
    入门神经网络-Python 实现(下)
    代码视角-神经网络-Python 实现(上)
    归纳方法
    神经网络-反向传播BP算法推导
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6718089.html
Copyright © 2020-2023  润新知