题面
具体分析见 dalao博客
- 妙就妙在当时, ^ ^
- 那么就枚举第行的一半,然后就能得到第整行.因为只要满足上面的结论就一定存在可行方案,所以~的每一行的选择互不影响,所以对于 ~每一行枚举选还是,再对于 ~枚举选还是选,求最大值就行了
- 时间复杂度为
CODE
#include
#include
#include
#include
using namespace std;
const int MAXN = 35;
int n, x, a[MAXN][MAXN];
bool rw[MAXN];
inline int calc(int i, int j, bool k) {
int res = a[i][j];
res += (rw[j] ? -a[i+x][j] : a[i+x][j]);
res += (k ? -a[i][j+x] : a[i][j+x]);
res += (rw[j]^k^rw[x] ? -a[i+x][j+x] : a[i+x][j+x]);
return res > 0 ? res : -res; //(i,j)选 0 或者选 1 ,取较优的
}
int main () {
scanf("%d", &n); x = (n+1)>>1;
for(int i = 1; i tmp1 ? tmp0 : tmp1); //取较优的
}
if(sum > ans) ans = sum;
}
printf("%dn", ans);
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net