【ZOJ】1856 Happy Life
暴力求解,只要每次改变happiness值为负的人的符号即可。
这题是保证有解的,至于为何难以证明。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
int main(int argc, char const *argv[])
{
// freopen("in", "r", stdin);
int n;
while(scanf("%d", &n) != EOF){
int f[300][300], p[300];
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
scanf("%d", &f[i][j]);
}// for()
p[i]=1;
}// for()
int ptr = 0;
while(1){
if(ptr == n){
break;
}
int sum = 0;
for(int i=0; i<n; i++){
sum += p[i]*f[ptr][i];
}
if(sum * p[ptr] < 0){
p[ptr] *= -1; // 反置
ptr = 0; //重新开始计算
}else{
ptr++;
}
}
puts("Yes");
for(int i=0; i<n; i++){
if(p[i] == 1){
puts("+");
}else{
puts("-");
}
}
}// while()
return 0;
}