Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=2280

View Code
 1 #include <cstdio>
 2 using namespace std;
 3 
 4 const int INF=110;
 5 int n,m=5;
 6 int d[1010][40];
 7 int mz[1010];
 8 void dfs(int p,int s,int t,int c,int r)
 9 {
10     if(p>=m)
11     {
12         if(c<d[r][t]) d[r][t]=c;
13         return;
14     }
15     if(p<4 && ((s>>p)&1)==0 && ((t>>p)&3)==0)
16         dfs(p+1,s|(1<<p),t|(3<<p),c,r);
17     if(p<4 && ((s>>p)&3)==0 && ((t>>p)&3)==0)
18         dfs(p+1,s|(3<<p),t|(3<<p),c,r);
19     if(p<4 && ((s>>p)&3)==0)
20         dfs(p+1,s|(3<<p),t,c,r);
21     if(((s>>p)&1)==0 && ((t>>p)&1)==0)
22         dfs(p+1,s|(1<<p),t|(1<<p),c,r);
23     if(p>0 && (((s>>p)&1)==0) && (t>>(p-1)&3)==0)
24         dfs(p+1,s|(1<<p),t|(3<<(p-1)),c,r);
25     if(p<4 && ((s>>p)&3)==0 && ((t>>p)&1)==0)
26         dfs(p+1,s|(3<<p),t|(1<<p),c,r);
27     if(p<4 && ((s>>p)&3)==0 && ((t>>p)&2)==0)
28         dfs(p+1,s|(3<<p),t|(2<<p),c,r);
29     if(((s>>p)&1)==1) dfs(p+1,s,t,c,r);
30     else dfs(p+1,s|(1<<p),t,c+1,r);
31 }
32 int f(int x)
33 {
34     int cnt=0;
35     x+=32;
36     for(int i=0;i<5;i++)
37     {
38         if((x&1)==1) x>>=1;
39         else
40         {
41             x>>=1;
42             if((x&1)==1) cnt++;
43             x>>=1;
44             i++;
45         }
46     }
47     return cnt;
48 }
49 int main()
50 {
51     int c;
52     while(~scanf("%d%d",&n,&c))
53     {
54         for(int i=0;i<n;i++)
55         {
56             char str[10];
57             scanf("%s",str);
58             int s=0;
59             for(int j=0;j<5;j++) s=(s<<1)+str[j]-'0';
60             mz[i]=s;
61         }
62         for(int i=0;i<n;i++)
63             for(int j=0;j<32;j++) d[i][j]=INF;
64         d[0][mz[0]]=0;
65         for(int i=0;i<n-1;i++)
66             for(int j=0;j<32;j++) if(d[i][j]<=c)
67                 dfs(0,j,mz[i+1],d[i][j],i+1);
68         bool flag=false;
69         for(int i=0;i<32;i++)
70             if(d[n-1][i]+f(i)<=c) flag=true;
71         if(flag) printf("YES\n");
72         else printf("NO\n");
73     }
74     return 0;
75 }

 

posted on 2012-07-11 15:41  Qiuqiqiu  阅读(139)  评论(0编辑  收藏  举报