zoukankan      html  css  js  c++  java
  • 洛谷1123 取数游戏

    题目描述

    一个N×M的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻8个格子中的一个即认为这两个数字相邻),求取出数字和最大是多少。

    输入输出格式

    输入格式:
    输入第1行有一个正整数T,表示了有T组数据。

    对于每一组数据,第1行有两个正整数N和M,表示了数字矩阵为N行M列。

    接下来N行,每行M个非负整数,描述了这个数字矩阵。

    输出格式:
    输出包含T行,每行一个非负整数,输出所求得的答案。

    输入输出样例

    输入样例#1: 复制
    3
    4 4
    67 75 63 10
    29 29 92 14
    21 68 71 56
    8 67 91 25
    2 3
    87 70 85
    10 3 17
    3 3
    1 1 1
    1 99 1
    1 1 1

    输出样例#1: 复制
    271
    172
    99
    说明

    对于第1组数据,取数方式如下:

    [67] 75 63 10

    29 29 [92] 14

    [21] 68 71 56

    8 67 [91] 25

    对于20%的数据,N, M≤3;

    对于40%的数据,N, M≤4;

    对于60%的数据,N, M≤5;

    对于100%的数据,N, M≤6,T≤20。

    此题用数据范围较小,所以深搜。注意一下不能用bool类型来标记取过的数周围的数,如:
    67 75 63 10
    29 29 92 14
    21 68 71 56
    8 67 91 25。
    这一组数据,
    第一遍搜索会选到67,63,21,71,如果用bool类型标记
    周围的数,回溯71时68,67就再次可以被选,而68,67有因为有21的限制不能选,所以只能用一个累加的b数组。

    #include<bits/stdc++.h>
    using namespace std;
    int t,n,m,a[8][8],ans=-1;
    int x[9]={-1,0,1,1,1,0,-1,-1},
        y[9]={-1,-1,-1,0,1,1,1,0};
    int b[8][8];
    inline void dfs(int ii,int jj,int sum){
        if(jj>m){
            jj=1;
            ii++;
        }
        if(ii==n+1) {ans=max(sum,ans);return;}
        if(!b[ii][jj]){
            sum+=a[ii][jj];
            for(register int i=0;i<=7;i++)  
                b[ii+x[i]][jj+y[i]]++;
            dfs(ii,jj+2,sum);
            sum-=a[ii][jj]; 
            for(register int i=0;i<=7;i++)
                b[ii+x[i]][jj+y[i]]--;
        }
        dfs(ii,jj+1,sum);    //如果不选。
    }
    int main(){
        scanf("%d",&t);
        for(register int i=1;i<=t;i++){
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            ans=-1;
            scanf("%d%d",&n,&m);
            for(register int j=1;j<=n;j++)
                for(register int k=1;k<=m;k++){
                    int xx;
                    scanf("%d",&xx);
                    a[j][k]=xx;
                }
            dfs(1,1,0);
            printf("%d
    ",ans);
        }
    }
  • 相关阅读:
    27 Spring Cloud Feign整合Hystrix实现容错处理
    26 Spring Cloud使用Hystrix实现容错处理
    25 Spring Cloud Hystrix缓存与合并请求
    24 Spring Cloud Hystrix资源隔离策略(线程、信号量)
    23 Spring Cloud Hystrix(熔断器)介绍及使用
    22 Spring Cloud Feign的自定义配置及使用
    21 Spring Cloud使用Feign调用服务接口
    20 Spring Cloud Ribbon配置详解
    19 Spring Cloud Ribbon自定义负载均衡策略
    18 Spring Cloud Ribbon负载均衡策略介绍
  • 原文地址:https://www.cnblogs.com/sdfzsyq/p/9677200.html
Copyright © 2011-2022 走看看