poj2965
来源:互联网 发布:软件项目保密协议 编辑:程序博客网 时间:2024/06/08 10:09
这题和1753差不多,多了一个数位压缩状态,记录翻了的点
#include<iostream> #include <string> #include<vector> #include<algorithm> #include<set> #include<cmath> using namespace std; #define lch(i) ((i)<<1) #define rch(i) ((i)<<1|1) #define sqr(i) ((i)*(i)) #define pii pair<int,int> #define mp make_pair #define FOR(i,b,e) for(int i=b;i<=e;i++) #define ms(a) memset(a,0,sizeof(a)) const int maxnum = 10005; int mat[4][4]; bool vis[4][4]; void flip(int x,int y){ mat[x][y]=1-mat[x][y]; FOR(i,0,3) mat[i][y]=1-mat[i][y];FOR(i,0,3) mat[x][i]=1-mat[x][i]; /*printf("\n"); FOR(i,0,3){ FOR(j,0,3){ printf("%d",mat[i][j]); } printf("\n"); }*/ } bool check(){ int sum=0; FOR(i,0,3){ FOR(j,0,3){ sum+=mat[i][j]; } } if (sum==16) { return true; } return false; } int mintime=100, mindp=0;void enumM(int n,int times ,int dp){ if(n==16)return; enumM(n+1,times,dp); flip(n/4,n%4); if(check()){ mintime=min(mintime,times); mindp = dp|(1<<n); } enumM(n+1,times+1,dp|(1<<n)); flip(n/4,n%4); } int main() { char ch; FOR(i,0,3){ FOR(j,0,3){ scanf("%c",&ch); if(ch=='+')mat[i][j]=0; else mat[i][j]=1; }scanf("%c",&ch); } ms(vis); if(check()) printf("0\n"); else{ enumM(0,1,0); if(mintime>16)printf("Impossible\n"); else printf("%d\n",mintime); int tmp,val;while(mindp){val=0;tmp = mindp & (-mindp);mindp -=tmp;while(tmp){val++;tmp =tmp>>1;};val--;printf("%d %d\n",val/4+1,val%4+1);} } }
0 0
- POJ2965
- poj2965
- poj2965
- POJ2965
- poj2965
- poj2965
- poj2965
- POJ2965
- POJ2965
- poj2965
- poj2965
- POJ2965
- POJ2965
- POJ2965
- poj2965
- POJ2965
- poj2965
- poj2965
- 使用系统提供的AVFoundation 实现二维码扫描(带动画)
- du 命令
- 【求组合数模板】
- 数据结构: Java中ArrayList的简单实现
- Sublime Text插件怎么安装
- poj2965
- Xcode版升级为7.0时,原来版本的工程图片数据请求需要设置
- 数据结构: Java中LinkedList的简单实现
- 绝对路径/相对路径(div)
- java 中四舍五入保留一位小数
- 【static&extern】和同行的问题讨论
- 背包问题
- 前景提取--KDE(kernel density estimate)
- 《ZHU, MAI, SHAO: SINGLE IMAGE DEHAZING USING COLOR ATTENUATION PRIOR》关于此文的理解与实现