POJ 3185 DFS

来源:互联网 发布:上海淘宝代理运营 编辑:程序博客网 时间:2024/05/22 17:03

好像可以用高斯消元???

但是用搜索写 这题就很水了。、。

// by SiriusRen#include <bitset>#include <cstdio>using namespace std;bitset<20>b;int jy;bool dfs(int t,int pos){    if(!b.to_ulong())return 1;    if(t>=jy)return 0;    for(int i=pos;i<20;i++)    {        b.flip(i);        if(i==0)b.flip(i+1);        else if(i==19)b.flip(i-1);        else b.flip(i+1),b.flip(i-1);        if(dfs(t+1,i+1))return 1;        b.flip(i);        if(i==0)b.flip(i+1);        else if(i==19)b.flip(i-1);        else b.flip(i+1),b.flip(i-1);    }    return 0;}int main(){    for(int i=0;i<20;i++){scanf("%d",&jy);if(jy)b[i]=1;}    for(jy=0;jy<=20;jy++)        if(dfs(0,0)){printf("%d\n",jy);return 0;}}

这里写图片描述

#include <iostream>using namespace std;int bowl[25]={0},flip[25]={0};int main(){    int i,cnt=100,tmp;    for (i=1;i<21;i++)      cin >> bowl[i];    flip[1] = tmp = 1;      //翻第一个    for (i=2;i<21;i++)        if ( flip[i] = (flip[i-2]^flip[i-1]^bowl[i-1]) )        tmp++;    if ( tmp<cnt && (flip[19]^flip[20]^bowl[20])==0 )           cnt = tmp;    flip[1] = tmp = 0;      //不翻第一个    for (i=2;i<21;i++)        if ( flip[i] = (flip[i-2]^flip[i-1]^bowl[i-1]) )        tmp++;    if ( tmp<cnt  && (flip[19]^flip[20]^bowl[20])==0 )      cnt = tmp;    cout << cnt << endl;    return 0;}

还有人这么写 但是我不理解。。。

0 0
原创粉丝点击