// 类似 2411 状态压缩
1 Source Code
2
3 Problem: 1185 User: eth1
4 Memory: 3452K Time: 297MS
5 Language: C++ Result: Accepted
6 Source Code
7 #include <iostream>
8 #include <cstring>
9 using namespace std;
10
11 const int N = 1<<11;
12 int dp[101][90][90];
13 int graph[110];
14 struct node
15 {
16 int man,status; // geshu , zhuangtai
17 }paobing[90];
18 int len;
19 void init_() // paobing cunqu
20 {
21 len=0;
22 paobing[len].man=0;
23 paobing[len++].status=0;
24 for(int i=1;i<N;i++)
25 {
26 int tem=i;
27 if(((tem<<1)&tem) || ((tem<<2)&tem)) continue;
28 paobing[len].status=i;
29 paobing[len].man=0;
30 tem=i;
31 while(tem)
32 {
33 if(tem&1) paobing[len].man++;
34 tem>>=1;
35 }
36 len++;
37 }
38 }
39 int solve(int x)
40 {
41 int l=0,r=len,ans=0;
42 while(l<=r)
43 {
44 int mid=(l+r)>>1;
45 if(paobing[mid].status>x)
46 {
47 ans=mid; r=mid-1;
48 }
49 else
50 l=mid+1;
51 }
52 return ans;
53 }
54 int main()
55 {
56 init_();
57 int n,m;
58 char s[15];
59 cin>>n>>m;
60 for(int i=0;i<n;i++)
61 {
62 cin>>s;
63 graph[i]=0;
64 for(int j=0;j<m;j++)
65 {
66 if(s[j]=='P') graph[i] = graph[i]*2+0; // 0
67 else graph[i] = graph[i]*2+1; // 1
68 }
69 }
70 int len_=solve((1<<m)-1);
71 memset(dp,0,sizeof(dp));
72 for(int i=0;i<len_;i++)
73 if((paobing[i].status & graph[0]) == 0) dp[0][i][0]=paobing[i].man;
74 for(int i=0;i<len_;i++)
75 if((paobing[i].status & graph[1]) == 0)
76 for(int j=0;j<len_;j++)
77 if((paobing[i].status & paobing[j].status) == 0)
78 dp[1][i][j] = max(dp[1][i][j],dp[0][j][0]+paobing[i].man);
79 for(int i=2;i<n;i++)
80 for(int cur=0;cur<len_;cur++)
81 if(((paobing[cur].status & graph[i]) == 0))
82 for(int p1=0;p1<len_;p1++)
83 if(((paobing[p1].status & paobing[cur].status) == 0))
84 for(int p2=0;p2<len_;p2++)
85 if((paobing[p2].status & paobing[cur].status) == 0)
86 dp[i][cur][p1] = max(dp[i][cur][p1],dp[i-1][p1][p2]+paobing[cur].man);
87 int ans=0;
88 for(int i=0;i<len_;i++)
89 for(int j=0;j<len_;j++)
90 ans = max(dp[n-1][i][j],ans);
91 cout<< ans <<endl;
92 return 0;
93 }
 posted on 2011-05-23 22:11  eth0  阅读(181)  评论(0编辑  收藏  举报