xiaoguozi's Blog
Pay it forword - 我并不觉的自豪,我所尝试的事情都失败了······习惯原本生活的人不容易改变,就算现状很糟,他们也很难改变,在过程中,他们还是放弃了······他们一放弃,大家就都是输家······让爱传出去,很困难,也无法预料,人们需要更细心的观察别人,要随时注意才能保护别人,因为他们未必知道自己要什么·····

博弈的基础题,通过求SG值,注意一点的是别忘了用记忆化搜索优化,否则容易TEL...
http://acm.hdu.edu.cn/showproblem.php?pid=1536

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <vector>
 4 #include <bitset>
 5 
 6 using namespace std;
 7 vector<int> s;
 8 int dp[10006];
 9 int dfs(int v)
10 {
11     bitset<300> hash(0);
12     for(int i=0;i<s.size();i++){
13         if(v-s[i]>=0){
14             if(dp[v-s[i]]==-1){
15                 dp[v-s[i]]=dfs(v-s[i]);
16             }
17             hash.set(dp[v-s[i]]);
18         }
19         else break;
20     }
21     for(int i=0;i<300;i++)
22         if(hash.test(i)==0)return i;
23 }
24 
25 int main()
26 {
27     int k;
28     while(scanf("%d",&k)!=EOF,k){
29         s.clear();
30         s.reserve(105);
31         int n;
32         while(k--){
33             scanf("%d",&n);
34             s.push_back(n);
35         }
36         memset(dp,-1,sizeof(dp));
37         sort(s.begin(),s.end());
38         scanf("%d",&n);
39         while(n--){
40             int m;
41             int sg=0;
42             scanf("%d",&m);
43             while(m--){
44                 int v;
45                 scanf("%d",&v);
46                 if(dp[v]==-1)
47                     dp[v]=dfs(v);
48                 sg^=dp[v];
49             }
50             printf(sg?"W":"L");
51         }
52         printf("\n");
53     }
54     return 0;
55 }
posted on 2008-07-23 20:54 小果子 阅读(461) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理