元宵节不放假挺郁闷的,于是时间机智的改到了星期6一整天!
题目描述MedalPluS 和他的小伙伴 NOIRP 发掘了一个骨灰级别的游戏——超级弹珠。
游戏的内容是:在一个 n*n 的矩阵里,有若干个敌人,你的弹珠可以摧毁敌人,但只能攻击你所在的行、列里的所有敌人,然后你就可以获得他们的分数之和,现在请你选择一个你的位置,使得能击杀的敌人最多,注意,你不能和敌人在一个地方。
输入格式输入有两行,第一行一个正整数 n,接下来 n 行,每行 n 列,如果有敌人则为一个正整数,否则为 0
输出格式输出共一行,最多分数,如果连你的容身之地都没有,请输出“Bad Game!”
输入输出样例输入 #1
4 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1
输出 #1
6说明/提示
送分题,客官请拿好,(*^__^*) 嘻嘻……
【数据范围】
对于 30%的数据,1≤n≤10
对于 100%的数据,1≤n≤1000,保证容身之地的数量小于 10000
这道题直接暴力遍历也是可以过的,把行和列的分数算出来就好啦^v^
AC代码:
#includeusing namespace std; int a[10050][10050]; int sum = 0; int flage = 0; int n; int main(){ cin >> n; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> a[i][j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if(a[i][j] == 0){ int sum1 = 0; for (int l = 0; l < n; l++)//行号不变,列号变,累加就能得到一行的分数 { if(a[i][l]){//只要不是零就可以 sum1 += a[i][l];//把它(分数)累加起来 } } for (int h = 0; h < n; h++)//列号不变,行号变,累加就能得到一列的分数 { if(a[h][j]){//同上 sum1 += a[h][j]; } } flage = 1; sum = max(sum1, sum);//取最大 } } } if(flage == 0){ cout << "Bad Game!"; }else{ cout << sum; } return 0; }
这道题是很简单的一道题,就无脑遍历就行,但是,我看错题了,它算的是分数,我想当然的以为矩阵里只有0和1……结果就是疯狂错(只对一个样例)
题目来源:洛谷



