题目链接:http://codeforces.com/contest/821/problem/A
解析:不是1的只要是它所在行中一个数与所在列中一个数的和等于它就满足,所有不是1的数都满足输出Yes, 否则输出No,n为50,直接暴力
代码:
#include<bits/stdc++.h>
#define N 209
using namespace std;
int mp[N][N], n;
bool check(int i, int j)
{
int num = mp[i][j];
for(int ii = 1; ii <= n; ii++)
{
if(ii == i) continue;
for(int jj = 1; jj <= n; jj++)
{
if(jj == j) continue;
if(mp[ii][j] + mp[i][jj] == num) return false;
}
}
return true;
}
int main()
{
//int n;
scanf("%d", &n);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
scanf("%d", &mp[i][j]);
int f = 0;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
if(mp[i][j]==1) continue;
if(check(i, j)) f = 1;
if(f) break;
}
if(f) break;
}
if(f) puts("No");
else puts("Yes");
return 0;
}