题面

BZOJ 传送门

分析

具体分析见 dalao博客

  • 妙就妙在当i&lt;x,j&lt;xi&lt;x,j&lt;xi<x,j<x时,(i,j)(i,j)(i,j) ^ (i,x)(i,x)(i,x) ^ (i,j+x)=0(i,j+x)=0(i,j+x)=0
  • 那么就枚举第xxx行的一半,然后就能得到第xxx整行.因为只要满足上面的结论就一定存在可行方案,所以111~(x−1)(x-1)(x−1)的每一行的选择互不影响,所以对于 i:1i:1i:1~(x−1)(x-1)(x−1)每一行枚举(i,x)(i,x)(i,x)选000还是111,再对于 j:1j:1j:1~(x−1)(x-1)(x−1)枚举(i,j)(i,j)(i,j)选000还是选111,求最大值就行了
  • 时间复杂度为O(x22x)O(x^22^x)O(x22x)

CODE

#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
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 <= n; ++i)
for(int j = 1; j <= n; ++j)
scanf("%d", &a[i][j]);
int ans = -0x7f7f7f7f;
for(int s = 0; s < (1<<x); ++s) { //枚举第 x 行的状态
int sum = 0;
for(int i = 1; i <= x; ++i)
if(s&(1<<(i-1))) rw[i] = 1, sum -= a[x][i];
else rw[i] = 0, sum += a[x][i];
for(int i = x+1; i <= n; ++i) {
rw[i] = rw[x] ^ rw[i-x];
if(rw[i]) sum -= a[x][i];
else sum += a[x][i];
}
for(int i = 1; i < x; ++i) { //每一行考虑
int tmp0 = a[i][x] + (rw[x] ? -a[i+x][x] : a[i+x][x]); //枚举 (i,x) 选 0
for(int j = 1; j < x; ++j) tmp0 += calc(i, j, 0); //计算当前最小值
int tmp1 = -a[i][x] + (rw[x] ? a[i+x][x] : -a[i+x][x]);//枚举 (i,x) 选 1
for(int j = 1; j < x; ++j) tmp1 += calc(i, j, 1); //计算当前最小值
sum += (tmp0 > tmp1 ? tmp0 : tmp1); //取较优的
}
if(sum > ans) ans = sum;
}
printf("%d\n", ans);
}

BZOJ 3901 棋盘游戏 (找结论+枚举+贪心)的更多相关文章

  1. [BZOJ 1028] [JSOI2007] 麻将 【枚举+贪心判断】

    题目链接:BZOJ - 1028 题目分析 枚举听的是哪种牌,再枚举成对的是哪种牌,再贪心判断: 从1到n枚举每一种牌,如果这种牌的个数小于0,就返回不合法. 将这种牌的张数 % 3, 剩下的只能和 ...

  2. BZOJ 3901 棋盘游戏 解题报告

    这题有个重要性质: 我们设 Flag[i][j] 表示 (i, j) 是否被奇数个操作所覆盖, 也就是操作次数对 2 取模. 设 x = (n + 1) / 2. 那么对于所有的合法的操作方案, 令 ...

  3. Bzoj 2241: [SDOI2011]打地鼠 暴力,枚举,贪心

    2241: [SDOI2011]打地鼠 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1022  Solved: 651[Submit][Status ...

  4. [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆)

    [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆) 题面 给出一个长度为n的序列,选k段长度在L到R之间的区间,一个区间的值等于区间内所有元素之的和,使得k个区间的值之和最大.区 ...

  5. BZOJ 3233: [Ahoi2013]找硬币

    BZOJ 3233: [Ahoi2013]找硬币 标签(空格分隔): OI-BZOJ OI-DP Time Limit: 10 Sec Memory Limit: 64 MB Description ...

  6. D. Diverse Garland Codeforces Round #535 (Div. 3) 暴力枚举+贪心

    D. Diverse Garland time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  7. 51nod1625(枚举&贪心)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1625 题意:中文题诶- 思路:枚举+贪心 一开始写的行和列同时 ...

  8. 枚举+贪心 HDOJ 4932 Miaomiao's Geometry

    题目传送门 /* 题意:有n个点,用相同的线段去覆盖,当点在线段的端点才行,还有线段之间不相交 枚举+贪心:有坑点是两个点在同时一条线段的两个端点上,枚举两点之间的距离或者距离一半,尽量往左边放,否则 ...

  9. [HDOJ5573]Binary Tree(找规律,贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5573 这个题……规律暂时还找不到,先贡献两发TLE的代码吧,一个dfs一个状压枚举. #include ...

随机推荐

  1. 为什么 Python 中的 True 等于 1

    开始的时候,需要用以下函数来做一个判断,根据返回的值来做一些后续判断处理: def is_success(param): if not param: return False return True ...

  2. win10系统,jdk环境变量配置,编辑系统变量窗口显示旧版单行和新版列表问题

    大家好,今天说一下我在配置jdk环境变量时遇到的编辑系统变量窗口显示问题. 首先我们说一下如何配置jdk环境变量. 右击此电脑,点击属性. 跳出如下窗口,点击高级系统设置. 跳出如下窗口,点击环境变量 ...

  3. find程序实现

    一个简单的查找字符串匹配 #include <stdio.h> #include <string.h> #define MAXLINE 1000 int getline(cha ...

  4. c++学习---迭代器

    迭代器类型: begin和end的返回值的类型由对象是否为常量所决定 无论对象是都为常量,cbegin和cend都将都到一个const_iterator

  5. JS 06 bom 框窗_页面_定时任务

    BOM(Broswer Object Model) 凡是 window 的属性和方法,均可以省略“window.” 方法: 框窗 1.警告框 window.alert("msg") ...

  6. html标签从.net framework转移到.net standard(.net core 2.2)时遇到的坑及填坑

    在原来的.net framework mvc中html的标签可以使用下面的方法 <select class="form-control" id="categoryi ...

  7. opencv-03--图像的算术运算

    图像的算术运算 Mat类把很多算数操作符都进行了重载,让它们来符合矩阵的一些运算,如果+.-.点乘等. 下面我们来看看用位操作和基本算术运算来完成colorReduce程序,它更简单,更高效. 将25 ...

  8. Trie树(字典树)-题解 P2580 【于是他错误的点名开始了】

    此题可以用STL中的map做,但是了解一下Trie树这个数据结构也是必须的. Trie树(又称字典树)有以下特点: 根节点不包含字符,除它之外的每一个节点都包含一个字符. 从根节点到某一节点,路径上经 ...

  9. MySQL5.6.11安装步骤(Windows7 64位)

    1. 下载MySQL Community Server 5.6.21,注意选择系统类型(32位/64位) 2. 解压MySQL压缩包 将以下载的MySQL压缩包解压到自定义目录下. 3. 添加环境变量 ...

  10. 简单注册表单--HTML练手项目3【Table】

    [本文为原创,转载请注明出处] 技术[HTML]   布局[Table] 步骤1  划分table布局 步骤2 填充内容 文本框+密码框+单选框+复选框+多行文本域+按钮 <input> ...