UVA - 11464 Even Parity(暴力枚举)
2017-08-08 16:55
429 查看
点击打开题目链接
题目大意:
给出一个N*N的01矩阵,将矩阵中的t个0换成1,使得每一个数的四个方向的数之和为偶数。求最小的t.
思路:
只枚举第一行,然后推出下几行的数值。枚举第一行用到了位运算的方法.
附上AC代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF=1e9;
int grid[20][20],tmp[20][20];
int T,n;
int ans,kase;
int _find(int t){
memset(tmp,0,sizeof(tmp));
for(int i=0;i<n;i++){
if(t&(1<<i))tmp[0][i]=1;
else if(grid[0][i]==1)return INF;
}
int cnt;
for(int i=1;i<n;i++){
for(int j=0;j<n;j++){
cnt=0;
if(j>0)cnt+=tmp[i-1][j-1];
if(j<n-1)cnt+=tmp[i-1][j+1];
if(i>1)cnt+=tmp[i-2][j];
tmp[i][j]=cnt%2;
if(grid[i][j]&&!tmp[i][j])return INF;
}
}
cnt=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(grid[i][j]!=tmp[i][j])
cnt++;
}
}
return cnt;
}
int main(){
ios::sync_with_stdio(false);
cin>>T;
kase=0;
while(T--){
ans=INF;
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>grid[i][j];
}
}
for(int i=0;i<(1<<n);i++){
ans=min(ans,_find(i));
}
cout<<"Case "<<++kase<<": ";
if(ans==INF)cout<<-1<<endl;
else cout<<ans<<endl;
}
return 0;
}
题目大意:
给出一个N*N的01矩阵,将矩阵中的t个0换成1,使得每一个数的四个方向的数之和为偶数。求最小的t.
思路:
只枚举第一行,然后推出下几行的数值。枚举第一行用到了位运算的方法.
附上AC代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF=1e9;
int grid[20][20],tmp[20][20];
int T,n;
int ans,kase;
int _find(int t){
memset(tmp,0,sizeof(tmp));
for(int i=0;i<n;i++){
if(t&(1<<i))tmp[0][i]=1;
else if(grid[0][i]==1)return INF;
}
int cnt;
for(int i=1;i<n;i++){
for(int j=0;j<n;j++){
cnt=0;
if(j>0)cnt+=tmp[i-1][j-1];
if(j<n-1)cnt+=tmp[i-1][j+1];
if(i>1)cnt+=tmp[i-2][j];
tmp[i][j]=cnt%2;
if(grid[i][j]&&!tmp[i][j])return INF;
}
}
cnt=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(grid[i][j]!=tmp[i][j])
cnt++;
}
}
return cnt;
}
int main(){
ios::sync_with_stdio(false);
cin>>T;
kase=0;
while(T--){
ans=INF;
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>grid[i][j];
}
}
for(int i=0;i<(1<<n);i++){
ans=min(ans,_find(i));
}
cout<<"Case "<<++kase<<": ";
if(ans==INF)cout<<-1<<endl;
else cout<<ans<<endl;
}
return 0;
}
相关文章推荐
- uva 11210 Chinese Mahjong(暴力枚举)
- UVA 10012 How Big Is It?(暴力枚举)
- uva 11464 - Even Parity(暴力枚举)
- UVA 11210 - Chinese Mahjong(暴力枚举)
- uva 565(暴力+枚举)
- UVa1262 - Password(暴力枚举)
- Uva 1595 暴力枚举
- UVALive 6163(暴力枚举)
- UVa - 10976 - Fractions Again?!(暴力求解枚举)
- UVA 617 - Nonstop Travel(数论+暴力枚举)
- UVA 725 Divsion(暴力枚举)
- UVA 687 - Lattice Practices(暴力枚举+位运算)
- UVA10010(八方向暴力枚举)
- UVA 1354 - Mobile Computing(暴力枚举)
- uva 11088 暴力枚举子集/状压dp
- UVA - 11754 Code Feat CRT (big技巧枚举 small暴力)
- UVA 11883 Repairing a Road(最短路径+暴力枚举)
- UVA 10729 - Treequivalence(暴力枚举)
- uva 1508 - Equipment(暴力+枚举子集)
- UVA 1352 Colored Cubes(暴力搜索枚举)