HDU 1536 poj 2960 博弈 SG函数

坑爹啊,一到简单的SG博弈题,折磨了我一个下午,竟然是在函数的递归调用中使用了全局的标志数组进行初始化。。。。

ContractedBlock.gif ExpandedBlockStart.gif View Code
 1 /*
2 * Author:lonelycatcher
3 * Problem:HDU 1536
4 * Type:组合博弈,GS函数
5 */
6 #include <iostream>
7 #include<stdio.h>
8 #include<algorithm>
9 #include<string.h>
10 #include<cstdlib>
11 using namespace std;
12 int s[100],k,m,heapnum,heap,SG[10010];
13 //int visited[100];全局标志数组,在递归调用中,坑爹啊!!!
14 int getSG(int x)
15 {
16 if(SG[x]!=-1)return SG[x];
17 int i,temp;
18 //memset(visited,0,sizeof(visited));全局标志数组,在递归调用中,坑爹啊!!!
19 int visited[100]={0};
20 for(i=0;i<k;i++)
21 {
22 temp=x-s[i];
23 if(temp<0)break;
24 if(SG[temp]==-1)
25 {
26 SG[temp]=getSG(temp);
27 }
28 visited[SG[temp]]=1;
29 }
30 for(i=0;;i++)
31 {
32 if(visited[i]==0)break;
33 }
34 return i;
35 }
36 int main()
37 {
38 setbuf(stdout,NULL);
39 int i,ans;
40 while(scanf("%d",&k))
41 {
42 if(k==0)break;
43 for(i=0;i<k;i++)
44 {
45 scanf("%d",&s[i]);
46 }
47 sort(s,s+k);
48 scanf("%d",&m);
49 memset(SG,-1,sizeof(SG));
50 SG[0]=0;
51 while(m--)
52 {
53 ans=0;
54 scanf("%d",&heapnum);
55 for(i=0;i<heapnum;i++)
56 {
57 scanf("%d",&heap);
58 if(SG[heap]==-1)
59 {
60 SG[heap]=getSG(heap);
61 }
62 ans^=SG[heap];//避免重复运算
63 }
64 if(ans)printf("W");
65 else printf("L");
66 }
67 printf("\n");
68 }
69 return 0;
70 }

转载于:https://www.cnblogs.com/lonelycatcher/archive/2011/08/20/2147359.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值