dp --- acdream原创群赛(16) --- B - Apple
B - Apple
Problem Description
This time, they are playing with apples. Initially, there are N baskets and M apples. Both baskets and apples are distinguishable. Each turn, (s)he can choose adding a basket or an apple. Alice always plays first. When (s)he complete operation, if the number of ways to split apples into baskets is not less than A, (s)he lose.
Now Alice wonder whether she can win if both player use best strategy.
Input
Each test case contains three integers N, M and A.
1 <= N <= 10,000
1 <= M <= 30
2 <= A <= 1,000,000,000
Output
Sample Input
3 1 4
2 2 10
Sample Output
lose
win
【题目大意】
有N个篮子和M个苹果,篮子和苹果都是有区别的。
对于每一个回合,他或她可以选择增加一个篮子或者一个苹果。爱丽丝总是第一个动手。
当他们完成一次操作后,如果将苹果分配到篮子里的方法大于等于A,则输。
现在要你判断先手的胜负。
N----篮子数
M---苹果数
A---上限
【题目分析】
定位:常见的dp博弈 、记忆化搜索
像这种没有SG函数的博弈已经很少见了,SG函数的博弈才真叫人蛋疼。
这题的一个细节的地方就是当篮子数=1的时候判断有点麻烦,其他的也不是很难。
具体看代码(注释很详细):
//Memory Time
// 1680K 0MS
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<iomanip>
#include<string>
#include<climits>
#include<cmath>
#define MAX 1100
#define LL long long
using namespace std;
int dp[40][30];
int A;
bool check(int n,int m){ //组合数
long long way=1;
for(int i=1;i<=n;i++){
way*=m;
if(way>=A) //不满足条件
return false;
}
return true; //满足条件
} //2--- 平局
//1-----win
//0----lose int dfs(int n,int m){
if(m==1){ //这个是细节,开始一直没想到
if(n*n>=A){
return 2; //只有一个篮子,并且一开始就大于A,平局
}
else{
int tmp1=-1,tmp2=-1;
if(check(n+1,m)){
tmp1=dfs(n+1,m);
if(tmp1==0) return 1;
}
if(check(n,m+1)){
tmp2=dfs(n,m+1);
if(tmp2==0)return 1;
}
if(tmp1==2) return 2;
else return 0;
}
} //使用dp数组来记录每一次的搜索值(记忆化搜索) if(dp[n][m]!=-1)
return dp[n][m];
int tmp1=-1,tmp2=-1;
if(check(n+1,m)){
tmp1=dfs(n+1,m);
if(tmp1==0) return dp[n][m]=1;
}
if(check(n,m+1)){
tmp2=dfs(n,m+1);
if(tmp2==0) return dp[n][m]=1;
}
if(tmp1==2||tmp2==2) return dp[n][m]=2;
else return dp[n][m]=0;
} int main(){
// freopen("cin.txt","r",stdin);
// freopen("cout.txt","w",stdout);
int n,m;
while(scanf("%d %d %d",&m,&n,&A)!=EOF){
memset(dp,-1,sizeof(dp));
int k=dfs(n,m);
if(k==2)puts("draw");
else if(k==1)puts("win");
else puts("lose");
}
return 0;
}
dp --- acdream原创群赛(16) --- B - Apple的更多相关文章
- ACdream原创群赛__15
这场感觉题目确实还算可以,不过,说好的每题10s效果上却不理想.这个时限还算比较紧.因为时间不是按绝对的多出几秒来计算,而是几倍来计算的. 比赛做的不好,后面又去做了一下. A:典型的数位DP,一直坑 ...
- ACdream原创群赛(13)のwuyiqi退役专场 C True love
True love Time Limit: 4000/2000 MS (Java/Others) Memory Limit:128000/64000 KB (Java/Others) Prob ...
- ACdream原创群赛(18)のAK's dream题解
只做了4题水题ADGI A题需要注意的就是“[...]”的输出了,何时输出,何时不输出. #include <stdio.h> int main() { int n, cur, d; ; ...
- 群赛 ZOJ3741(dp) ZOJ3911(线段树)
zoj3741 简单dp.wa了两个小时,中间改了好多细节.后来还是不对,参考了别人的代码,发现一个致命问题,初始化的时候,不是每种状态都能直接达到的.初始化成-1. (题目有个小坑,0<=L& ...
- ACdream群赛1112(Alice and Bob)
题意:http://acdream.info/problem?pid=1112 Problem Description Here is Alice and Bob again ! Alice and ...
- centos环境 使用kubeadm快速安装k8s集群v1.16.2
全程使用root用户运行,宿主机需要连接外网 浏览一下官方kubeadm[有些镜像用不了] https://kubernetes.io/docs/setup/production-environmen ...
- [原创]obj-c编程16:键值编码(KVC)
原文链接:obj-c编程16:键值编码(KVC) 我们可以借助obj-c中的键值编码(以后简称KVC,Key-Value Coding)来存取类的属性,通过指定所要访问的属性名字符串标示符,可以使用存 ...
- 二进制安装K8S集群V1.16.3
centos linux7.5 cat > /etc/hosts << EOF 192.168.199.221 master 192.168.199.222 node1 192.16 ...
- kubeadm部署K8S集群v1.16.3
本次先更新kubeadm快速安装K8S,二进制安装上次没写文档,后续更新,此次最新的版本是V1.16.3 1.关闭防火墙.关闭selinux.关闭swapoff -a systemctl stop f ...
随机推荐
- (尚033)Vue_案例_slot(组件间的通信4:slot)
1.组件间的通信4:slot(slot:插槽,就是一个占位) slot用于标签反复使用很多次 1.1理解 此方式用于父组件向子组件传递标签数据, 其他为数据通信 外面组件向里面组件传递标签进去,直接拿 ...
- Linux安全加固(二)禁止普通用户su到root/设置SSH终端接入白名单/修改history条数
一.禁止普通用户su到root管理员.设置可以su到root的白名单 1.首先看一下正常情况 2.可以看到普通用户使用su root命令,输入密码即可登录到root用户 3.下面开始配置禁止所有普通用 ...
- 如果设置Redis客户端的超时时长?
客户端的超时时长分连接超时和读写超时,如果是基于hiredis的实现,则读写超时是合在一起的,同一参数控制. 在hiredis中,读写超时调用函数redisSetTimeout设置,可以看到没有区分读 ...
- LSF 作业系统常用命令
LSF(Load Sharing Facility)是一个被广泛使用的作业管理系统,具有高吞吐.配置灵活的优点.通过 LSF 集中监控和调度,可以充分利用计算机的CPU.内存.磁盘等资源. bqueu ...
- 如何使用gitbook写文档
本文主要参考资料为该网址:https://github.com/GitbookIO/gitbook/blob/master/docs/setup.md 如何想使用现成的gitbook,网络上虽说可以搜 ...
- JAVA字符编码三:Java应用中的编码问题
第三篇:JAVA字符编码系列三:Java应用中的编码问题 这部分采用重用机制,引用一篇文章来完整本部分目标. 来源: Eceel东西在线 问题研究--字符集编码 地址:http://china.e ...
- 【用例篇】Xmind转为csv 导入禅道
用过禅道的都知道,用例维护实在是太不方便了,有人推荐了一种方法,用Xmind先编写用例(思路比较清晰),写好之后借助工具(xmind2testcase)将用例转为CSV格式,之后再导入禅道 参考资料: ...
- Redis禁用部分危险命令(keys/flushdb等)
在redis.conf文件[SECURITY]区域配置: 1.禁用命令: rename-command KEYS "" rename-command FLUSHALL " ...
- Java一行代码
1.整数格式化成0X 的形式字符串 String hour=String.format("%02d", txtWaringTime.getCurrentHour()); Strin ...
- RocketMQ、Kafka、RabbitMQ的对比
RocketMQ 相比于 RabbitMQ.Kafka 具有主要优势特性有: 支持事务型消息(消息发送和DB操作保持两方的最终一致性,RabbitMQ 和Kafka 不支持) 支持结合 RocketM ...