额,这题我想了半场也没有想出来,思维是硬伤……

比赛的时候只是想到了,减1和合并都只算一个操作数,唯一的例外是减掉一个1时,算两个操作数。

于此同时减去最后一个1时只算一个操作数。

设状态为dp[i][j],i表示1的个数,j表示非1堆全部消除所需的操作数。

然后根据博弈的基本准则,即当一个状态的后继状态有一个必败状态,则该状态为必胜状态,反之为必败状态。

然后注意状态的转移,记忆化搜即可……

关键是状态比较难想……看了别人的代码,还是比较好理解的。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int dp[60][60000];
int vis[60][60000];
int dfs(int i,int j)
{if(vis[i][j]) return dp[i][j];vis[i][j]=1;int &ans=dp[i][j];if(j==1) return ans=dfs(i+1,0);ans=0;if(i>0 && !dfs(i-1,j)) ans=1;else if(j>0 && !dfs(i,j-1)) ans=1;else if(i>0 && j>0 && !dfs(i-1,j+1)) ans=1;else if(i>1 && ((j>0 && !dfs(i-2,j+3))||(j==0 && !dfs(i-2,2)))) ans=1;return ans;
}
int main()
{//freopen("in.txt","r",stdin);int T,kase=1;scanf("%d",&T);memset(vis,0,sizeof(vis));while(T--){int n;scanf("%d",&n);int one=0,sum=0;for(int i=0;i<n;i++){int t;scanf("%d",&t);if(t==1) one++;else sum+=(t+1);}if(sum) sum--;if(dfs(one,sum)) printf("Case #%d: Alice\n",kase++);else printf("Case #%d: Bob\n",kase++);}return 0;
}

trainging contest#2(2011成都现场赛)A BY bly相关推荐

  1. trainging contest#2(2011成都现场赛)D BY bly

    这种dp其实不算难,状态什么的都不难想,就是需要用SPFA写,不然就会莫名奇妙的WA 昨天用dp写,怎么改都是WA,确切的说应该说是记忆化搜就WA 今天改成用SPFA就过了,还有我把堆优化的dij和S ...

  2. trainging contest#2(2011成都现场赛)G BY bly

    一道AC自动机+DP,因为单词可能重复,所以记录结点信息的需要是以个vector,然后dp的时候需要递归的更新dp值,因为一个结点可能为多个单词的结尾. #include <iostream&g ...

  3. 2013年成都现场赛赛后总结

    过了一个礼拜才写总结,我实在是太懒了,不过也没办法,人总是有点懒的嘛.这次比赛坐了飞机过去,去的时候状态很好,到步的第一天晚上吃了个略丰盛的火锅,虽然我实际上是不停的装蛋炒饭吃饱的.那天晚上稍微做了下 ...

  4. trainging contest#1(2011大连现场赛)C BY bly

    需要推出一个很奇妙的性质,知道了这个性质之后这道题就是道简单区间dp了. 就是一段区间[i,j]必须从2个端点之一开始按,仔细想想确实是这样的,比赛的时候贪心不出dp顺序,还以为是搜索(还是思维太弱了 ...

  5. trainging contest#1(2011大连现场赛)I BY bly

    先因式分解,记录所有的因子 然后直接容斥即可,四次方和公式:n*(n+1)*(2*n+1)*(3*n^2+3*n-1)/30 #include <iostream> #include &l ...

  6. trainging contest#1(2011大连现场赛)G BY bly

    AC自动机+状压DP,这个相当明显 状态设置为dp[len][u][st]表示在自动机内走了len步后,位于结点u,经过的pattern的状态为st时,所能取得的最大value. 然后就很容易得出状态 ...

  7. HDU 4111 Alice and Bob (博弈)11年成都现场赛

    转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlove 可惜没有机会去现场做,不过当时肯定 ...

  8. 2011 ACM/ICPC 北京现场赛 B HouYi's secret

    周日起床后看见QQ群消息说 bupt上有半同步北京现场赛试题,就进入看了下题,一共读了两个题 A和B(因为这两个题目当时就都提交的很多) A题不会做,有限制的生成树的这类知识好像还没有接触过... B ...

  9. 2011年国赛B题论文研读

    本文知识点速查 0-1规划.线性加权评价.权重确定 一.2011年国赛B题的要求 2011年国赛B题的概括如下. 试就某市(有六个区,分别为A,B,C,D,E,F)设置交巡警服务平台的相关情况,建立数 ...

最新文章

  1. 微信JS-SDK之图像接口开发详解
  2. 程序猿职业生涯的迷惘与野望
  3. hdu-4811 Ball
  4. android 查找字符在字符串的位置
  5. List的三种遍历方式
  6. 何川L3管理课_模块4_成果管理
  7. git diff old mode 100755 new mode 100644
  8. 怎么用psftp下载linux上的文件夹,使用PSFTP上传和下载Linux服务器文件.doc
  9. 学习记录:xmind2testcase测试用例模板
  10. 【好题分享】适合C++初学者(数组的定义与初始化)
  11. 商标注册查询入口官网在国家知识产权局商标局查询
  12. 服务器提示临时文件已满,win10系统提示”由于临时文件夹已满而导致“磁盘空间不足”错误的解决办法_win10教程_uc电脑园...
  13. java 复数_java 中实现复数的加减
  14. matlab三相功率测量不对,测量信号的功率 - MATLAB Simulink - MathWorks 中国
  15. vue结合el-dialog 封装自己的confirm二次确认弹窗
  16. qt android 浏览器下载安装,[原创]六款安卓平台浏览器耗电量实测
  17. 【机器视觉案例】(12) 自制AI视觉小游戏--贪吃蛇,附python完整代码
  18. 前端UI交互 - 中后台系统 - 1+4色彩模式
  19. 全新版出海翻译软件支持WhatsApp自动翻译
  20. 网络电台-SHOUTcast

热门文章

  1. 《乔布斯传》圈点(5)
  2. wireshark安装s7comm-plus插件
  3. 更1多免费源码668源码网.html,某宝在线客服源码含详细教程
  4. 【温和从容,岁月静好】
  5. 开关电源元器件的选择
  6. 后疫情时代,零售行业有哪些新机遇
  7. 25个例子学会Pandas Groupby 操作(附代码)
  8. 小批量制造企业生产计划
  9. 深圳Java培训:相伴java,感受spring
  10. 黑群晖私有云NAS:同步百度云盘数据