UVA 11464 偶数矩阵(递推 | 进制)
题目链接:https://vjudge.net/problem/UVA-11464
一道比较好的题目。
思路如下:
如果我们枚举每一个数字“变”还是“不变”,那么需要枚举$2^{255}$种情况,很显然不行。
那么我们就来优化一下:我们只枚举第一行的数,然后根据计算得出第二、三....行的数。
这样复杂度就优化到了$O(2^n\times n^2)$。
然后用$A[][]$和$B[][]$分别表示变化前后的矩阵。
那么现在的问题就简化成了如何枚举第一行和如何递推。
枚举第一行:运用了状压的思想,把一行数看成一个二进制数,然后$&(1<<c)$,看是否为1,由此我们就构造了一个如下图所示的矩阵。
递推方法:
求出$B[r-1][c]$的上、左、右数之和,如果为偶数,则$B[r][c]=0$,反之$B[r][c]=1$。
在递推中如果发现由$1$转变到$0$的情况,那么是不可能的。
AC代码:
#include<cstdio>
#include<iostream>
#include<cstring> using namespace std; const int maxn=;
const int INF=0x7f7f7f;
int n,A[maxn][maxn],B[maxn][maxn]; int check(int s){
memset(B,,sizeof(B));
for(int c=;c<n;c++){
if(s&(<<c)) B[][c]=;
else if(A[][c]==) return INF;
}
for(int r=;r<n;r++){
for(int c=;c<n;c++){
int sum=;
if(r>) sum+=B[r-][c];
if(c>) sum+=B[r-][c-];
if(c<n-) sum+=B[r-][c+];
B[r][c]=sum%;
if(A[r][c]==&&B[r][c]==) return INF;
}
}
int cnt=;
for(int r=;r<n;r++)
for(int c=;c<n;c++) if(A[r][c]!=B[r][c]) cnt++;
return cnt;
} int main(){
int T;
scanf("%d",&T);
for(int k=;k<=T;k++){
scanf("%d",&n);
for(int r=;r<n;r++)
for(int c=;c<n;c++) scanf("%d",&A[r][c]);
int ans=INF;
for(int s=;s<(<<n);s++)
ans=min(ans,check(s));
if(ans==INF) ans=-;
printf("Case %d: %d\n",k,ans);
}
return ;
}
AC代码
UVA 11464 偶数矩阵(递推 | 进制)的更多相关文章
- UVA 11464 偶数矩阵
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- POJ 3734 Blocks(矩阵快速幂+矩阵递推式)
题意:个n个方块涂色, 只能涂红黄蓝绿四种颜色,求最终红色和绿色都为偶数的方案数. 该题我们可以想到一个递推式 . 设a[i]表示到第i个方块为止红绿是偶数的方案数, b[i]为红绿恰有一个是偶数 ...
- UVa 12034 - Race(递推 + 杨辉三角)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- HDU 1757 A Simple Math Problem 【矩阵经典7 构造矩阵递推式】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1757 A Simple Math Problem Time Limit: 3000/1000 MS (J ...
- UVA 10288 - Coupons(概率递推)
UVA 10288 - Coupons option=com_onlinejudge&Itemid=8&page=show_problem&category=482&p ...
- SPOJ:Fibonacci Polynomial(矩阵递推&前缀和)
Problem description. The Fibonacci numbers defined as f(n) = f(n-1) + f(n-2) where f0 = 0 and f1 = 1 ...
- POJ 3734 Blocks 矩阵递推
POJ3734 比较简单的递推题目,只需要记录当前两种颜色均为偶数, 只有一种颜色为偶数 两种颜色都为奇数 三个数量即可,递推方程相信大家可以导出. 最后来个快速幂加速即可. #include< ...
- uva 11375 Matches (递推)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- UVa 10561 (SG函数 递推) Treblecross
如果已经有三个相邻的X,则先手已经输了. 如果有两个相邻的X或者两个X相隔一个.,那么先手一定胜. 除去上面两种情况,每个X周围两个格子不能再放X了,因为放完之后,对手下一轮再放一个就输了. 最后当“ ...
随机推荐
- Keep、小红书、美图…独角兽App能拿到新一轮救命钱吗?
大多数人热爱手机,不是因为时尚的外观或者结实的零部件,而是因琳琅满目的App赋予其太多的功能.智能手机最先是清理掉人类的零碎时间,现如今又开始肢解我们大块的时间,或者说,智能手机本身就是生活.在如此背 ...
- HttpRequestException encountered解决方法
每次pull代码的时候,总是要输入账号,密码,百度了一下HttpRequestException encountered错误 发现是Github 禁用了TLS v1.0 and v1.1,必须更新Wi ...
- jarvis OJ部分writeup
[XMAN]level 0 [XMAN]level 1 —— 简单shellcode利用 [XMAN]level 2 [XMAN]level 3 —— ret2libc尝试 [XMAN]level2& ...
- Linux之温故知新1
1.touch命令的使用 2.使用(cd -)可以在上次使用的目录来回切换 3.ls通配符的使用*代表任意字符和任意个字符, ?代表任意一个字符, [12345]中的任意一个字符, [1-5]中的任意 ...
- 题解【洛谷P1886】滑动窗口 /【模板】单调队列
题面 单调队列模板题. 单调队列可以从队首和队尾出队. 队列中的元素大小具有一定的顺序. 具体可参考这一篇题解 #include <bits/stdc++.h> #define itn i ...
- docker usage (2)
1. docker command docker start postgres docker container ls --all docker image ls --all docker ps -a ...
- [CodeForces]Educational Round 52
幸好我没有打这场,我VP的时候在C题就卡死了,我果然还是太菜了. A Vasya and Chocolate 题意:一个巧克力\(c\)元,买\(a\)赠\(b\),一共有\(n\)元,问能买几个巧克 ...
- 题解 SP27102/UVA1747 【Swap Space】
SP27102 [Swap Space] 双倍经验:UVA1747 Swap Space 用(a,b)表示每个硬盘的原容量和新文件系统下的容量.分两种情况考虑:a≤b和a>b 第一类a≤b格式化 ...
- android 获取颜色 getColor 方法 deprecated 过期
可以使用下面代码代替: ContextCompat.getColor(getContext(), R.color.post_list_content_color) 需要引入: compile 'com ...
- es2.0的语法学习
确定文档和查询有多么相关的过程被称为打分(scoring):将查询作为输入,使用不同的手段来确定每一篇文档的得分,将每一个因素最后通过公式综合起来,返回该文档的最终得分.这个综合考量的过程,就是我们希 ...