codeforces Gargari and Bishops(很好的暴力)

简介:

/*
    题意:给你一个n*n的格子,每一个格子都有一个数值!将两只bishops放在某一个格子上,
    每一个bishop可以攻击对角线上的格子(主对角线和者斜对角线),然后会获得格子上的
    数值(只能获取一次)。要求输出两个bishops获取的最大值以及它们所在的位置!
    
    
    思路:直接暴力!....不错的暴力题目! 
    首先我们都知道每一条主对角线上的横纵坐标的和相同,每一条副对角线上的横纵坐标的差相同!
    那么我们在输入的时候就可以将所有对角线上的数值之和求出来了! 
    
    最后我们发现如果要获得最大值,那么还有一条就是两个bishops所在的对角线不能相交在
    同一个格子上!只要满足两个bishops的哼纵坐标之和互为奇偶就可以了! 
    
    在所有格子中找到横纵坐标之和为奇数并且获得对角线上数值最大的格子和横纵坐标之
    和为偶数并且获得对角线上数值最大的格子! 
    二者最大获得值相加就是最终的答案了! 
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define N 2005
using namespace std;
typedef long long LL; 
int num[N][N];
LL sumN[N*2], sumM[N*2];

int n;

int main(){
    while(scanf("%d", &n)!=EOF){
        memset(sumN, 0, sizeof(sumN));
        memset(sumM, 0, sizeof(sumM));
        for(int i=1; i<=n; ++i)
              for(int j=1; j<=n; ++j){ 
                scanf("%d", &num[i][j]);
                sumN[i+j]+=num[i][j];//横纵坐标之和为i+j的对角线的数值和 
                sumM[i-j+n]+=num[i][j];//横纵坐标之差为i-j的对角线的数值和 
            }
    
        LL maxOdd=-1, maxEvent=-1, s;
        int x1, x2, y1, y2;
        for(int i=1; i<=n; ++i)
             for(int j=1; j<=n; ++j){
                 if((i+j)&1){ 
                     if(maxOdd<(s=sumN[i+j]+sumM[i-j+n]-num[i][j])){
                         maxOdd=s;//横纵坐标之和为奇数并且获得对角线上数值最大的格子
                         x1=i;
                         y1=j;
                     }
                }
                else{
                     if(maxEvent<(s=sumN[i+j]+sumM[i-j+n]-num[i][j])){
                         maxEvent=s;//横纵坐标之和为偶数并且获得对角线上数值最大的格子
                         x2=i;
                         y2=j;
                     }
                }
            }

        printf("%lld\n",maxOdd+maxEvent);     
        printf("%d %d %d %d\n", x1, y1, x2, y2);
    }
     return 0;
}

目录
相关文章
|
7月前
代码随想录 Day40 动态规划08 LeetCodeT198打家劫舍 T213打家劫舍II T337 打家劫舍III
代码随想录 Day40 动态规划08 LeetCodeT198打家劫舍 T213打家劫舍II T337 打家劫舍III
49 0
|
人工智能
codeforces455——A. Boredom(线性DP)
codeforces455——A. Boredom(线性DP)
126 0
codeforces455——A. Boredom(线性DP)
|
人工智能 vr&ar Perl
codeforces1509 C. The Sports Festival (区间DP)
codeforces1509 C. The Sports Festival (区间DP)
109 0
|
数据安全/隐私保护
Codeforces 417D.Cunning Gena (状压DP)
Codeforces 417D.Cunning Gena (状压DP)
84 0
|
机器学习/深度学习
牛客 小 Q 与彼岸花(区间DP)
牛客 小 Q 与彼岸花(区间DP)
92 0
|
算法 前端开发 程序员
「LeetCode」198-打家劫舍⚡️
「LeetCode」198-打家劫舍⚡️
125 0
「LeetCode」198-打家劫舍⚡️
|
人工智能
Codeforces-1260-E. Tournament贪心
题意: 有n个人,第i个人有力量值i,这n个人中,每次对局两两之间进行solo,如果说一个人的力量之大于他的对手,这个人是赢的,赢得比赛的选手会进入下一轮比赛中。 然而里面有一个人为你的朋友,他或许并不是里面最强的人,要想让朋友成为冠军,就需要对必要的人进行贿赂,求出最少需要花费多少才能使得朋友成为冠军。在每次对局中,都可以进行任意的对局安排,对局安排只取决于自己
97 0
|
算法
力扣每日一题:134.加油站 贪心+暴力双解
力扣每日一题:134.加油站 贪心+暴力双解
248 0