zoukankan      html  css  js  c++  java
  • Pebbles(hdu 2167)

    题意:给定一个N*N的方格,让你在里面取出一些数使其和最大,要求每一个数不能与其相邻的8个数同时取出。

    /*
        和hdu1565差不多,只不过在更新的时候考虑斜上方的格子对该格子的影响。
    */
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #define N 16
    using namespace std;
    int dp[N][1<<N],a[N][N],n,m;
    char ch[N*4];
    void dfs(int s,int ss,int y,int x,int sum){
        if(y>n-1){
            dp[x+1][ss]=max(dp[x+1][ss],dp[x][s]+sum);
            return;
        }
        int flag=0;
        if(s&(1<<y)) flag=1;
        if(y>0&&(s&(1<<y-1))) flag=1;
        if(y<n-1&&(s&(1<<y+1))) flag=1;
        if(!flag) dfs(s,ss|(1<<y),y+2,x,sum+a[x+1][y]);
        dfs(s,ss,y+1,x,sum);
    }
    void work(){
        for(int i=2;i<=n;i++)
                for(int j=0;j<n;j++)
                    scanf("%d",&a[i][j]);
        for(int i=0;i<n;i++)
            for(int j=0;j<(1<<n);j++)
                dfs(j,0,0,i,0);
        int ans=0;
        for(int i=0;i<(1<<n);i++)
            ans=max(ans,dp[n][i]);
        printf("%d
    ",ans);
    }
    int main(){
        while(gets(ch)){
            memset(dp,0,sizeof(dp));
            int len=strlen(ch);n=0;
            if(!len) continue;
            for(int i=0;i<len;i+=3)
                a[1][n++]=(ch[i]-'0')*10+ch[i+1]-'0';
            work();
        }
        return 0;
    }
  • 相关阅读:
    float及清除浮动
    HTML meta标签总结与属性使用介绍
    jQuery相关知识
    FullCalendar日程设置
    Python基础知识
    波段选择
    CSS基础知识
    稀疏表示的高光谱分类
    Sass基本特性
    [Sass]混合宏
  • 原文地址:https://www.cnblogs.com/harden/p/6560517.html
Copyright © 2011-2022 走看看