ACM-ICPC 2018 徐州赛区网络预赛 B(dp || 博弈(未完成)
传送门
题面:
In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl named "Sena" are playing a video game. The game system of this video game is quite unique: in the process of playing this game, you need to constantly face the choice, each time you choose the game will provide 1-31−3 options, the player can only choose one of them. Each option has an effect on a "score" parameter in the game. Some options will increase the score, some options will reduce the score, and some options will change the score to a value multiplied by -1−1 .
That is, if there are three options in a selection, the score will be increased by 11, decreased by 11, or multiplied by -1−1. The score before the selection is 88. Then selecting option 11 will make the score become 99, and selecting option 22 will make the score 77 and select option 33 to make the score -8−8. Note that the score has an upper limit of 100100 and a lower limit of -100−100. If the score is 9999 at this time, an option that makes the score +2+2 is selected. After that, the score will change to 100100 and vice versa .
After all the choices have been made, the score will affect the ending of the game. If the score is greater than or equal to a certain value kk, it will enter a good ending; if it is less than or equal to a certain value ll, it will enter the bad ending; if both conditions are not satisfied, it will enter the normal ending. Now, Koutarou and Sena want to play the good endings and the bad endings respectively. They refused to give up each other and finally decided to use the "one person to make a choice" way to play the game, Koutarou first choose. Now assume that they all know the initial score, the impact of each option, and the kk, ll values, and decide to choose in the way that works best for them. (That is, they will try their best to play the ending they want. If it's impossible, they would rather normal ending than the ending their rival wants.)
Koutarou and Sena are playing very happy, but I believe you have seen through the final ending. Now give you the initial score, the kk value, the ll value, and the effect of each option on the score. Can you answer the final ending of the game?
Input
The first line contains four integers n,m,k,ln,m,k,l(1\le n \le 10001≤n≤1000, -100 \le m \le 100−100≤m≤100 , -100 \le l < k \le 100−100≤l<k≤100), represents the number of choices, the initial score, the minimum score required to enter a good ending, and the highest score required to enter a bad ending, respectively.
Each of the next nn lines contains three integers a,b,ca,b,c(a\ge 0a≥0 , b\ge0b≥0 ,c=0c=0 or c=1c=1),indicates the options that appear in this selection,in which a=0a=0 means there is no option to increase the score in this selection, a>0a>0 means there is an option in this selection to increase the score by aa ; b=0b=0 means there is no option to decrease the score in this selection, b>0b>0 means there is an option in this selection to decrease the score by bb; c=0c=0 means there is no option to multiply the score by -1−1 in this selection , c=1c=1 means there is exactly an option in this selection to multiply the score by -1−1. It is guaranteed that a,b,ca,b,c are not equal to 00 at the same time.
Output
One line contains the final ending of the game. If it will enter a good ending,print "Good Ending"
(without quotes); if it will enter a bad ending,print "Bad Ending"
(without quotes);otherwise print "Normal Ending"
(without quotes).
样例输入1复制
3 -8 5 -5
3 1 1
2 0 1
0 2 1
样例输出1复制
Good Ending
样例输入2复制
3 0 10 3
0 0 1
0 10 1
0 2 1
样例输出2复制
Bad Ending
题目来源
题意:
有两个人在玩游戏,他们最开始有积分m分,如果最终的积分val>=k,则进入Bad Ending,如果最终积分val<l 则进入Good Ending。现在一共有n个关卡,每个选项有三个选项a,b,c,a代表使得积分+a,b代表使得积分+b,c==1代表使得积分*-1。如果a或b等于0,则不能选择,题目保证a,b,c不同时为0,A先选,B后选,A想要进入GE,B想要进入BE,他们都会进行最优的操作,问你最后的结局。
分析:一开始就往博弈的方面去考虑的,披着博弈的DP , 没有想到这就是简单的DP转移,a想得到自己想要的结局肯定是越大越好拉 , b想赢肯定是越小越好了,依据这个理论概念,可以dp枚举,怎么DP呢? 设DP(i,j)表示第i个现在分数是J的最小或者最大分数 , 注意范围是-100,100 , 可以偏移也可以用map, 我这是用了map , 防止变量搞错了 ;
!!!!!(这题也可以博弈的做法,挡分析挺复杂的,留着以后)
#include<bits/stdc++.h> using namespace std ; const int maxn = ;
map<int , map<int,int> > dp ; int a[maxn],b[maxn],c[maxn];
int main( )
{
int n , m , k , l;
scanf("%d%d%d%d" , &n , &m , &k , &l);
for(int i = ; i<=n ; i++)
scanf("%d%d%d",&a[i],&b[i],&c[i]);
for(int i=- ; i<= ; i++)
dp[n+][i] = i;
for(int i=n ; i>= ; i--)
{
for(int j=- ; j<= ; j++)
{
if(i%==)
{ dp[i][j]=;
if(a[i])
dp[i][j]=min(dp[i][j],dp[i+][min(j+a[i],)]);
if(b[i])
dp[i][j]=min(dp[i][j],dp[i+][max(j-b[i],-)]);
if(c[i])
dp[i][j]=min(dp[i][j],dp[i+][-j]);
}
else{
dp[i][j]=-;
if(a[i])
dp[i][j]=max(dp[i][j],dp[i+][min(j+a[i],)]);
if(b[i])
dp[i][j]=max(dp[i][j],dp[i+][max(j-b[i],-)]);
if(c[i])
dp[i][j]=max(dp[i][j],dp[i+][-j]);
}
}
}
if(dp[][m]>=k)
puts("Good Ending");
else if(dp[][m]<=l)
puts("Bad Ending");
else
puts("Normal Ending");
}
总结:以后考虑题的时候,需要多方面的考虑 , 考虑多方法
ACM-ICPC 2018 徐州赛区网络预赛 B(dp || 博弈(未完成)的更多相关文章
- ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心)
ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心) Trace 问答问题反馈 只看题面 35.78% 1000ms 262144K There's a beach in t ...
- ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer (最大生成树+LCA求节点距离)
ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer J. Maze Designer After the long vacation, the maze designer ...
- 计蒜客 1460.Ryuji doesn't want to study-树状数组 or 线段树 (ACM-ICPC 2018 徐州赛区网络预赛 H)
H.Ryuji doesn't want to study 27.34% 1000ms 262144K Ryuji is not a good student, and he doesn't wa ...
- ACM-ICPC 2018 徐州赛区网络预赛 B. BE, GE or NE
In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl named &qu ...
- ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn't want to study
262144K Ryuji is not a good student, and he doesn't want to study. But there are n books he should ...
- ACM-ICPC 2018 徐州赛区网络预赛 F. Features Track
262144K Morgana is learning computer vision, and he likes cats, too. One day he wants to find the ...
- ACM-ICPC 2018 徐州赛区网络预赛 I. Characters with Hash
Mur loves hash algorithm, and he sometimes encrypt another one's name, and call him with that encryp ...
- ACM-ICPC 2018 徐州赛区网络预赛 D 杜教筛 前缀和
链接 https://nanti.jisuanke.com/t/31456 参考题解 https://blog.csdn.net/ftx456789/article/details/82590044 ...
- ACM-ICPC 2018 徐州赛区网络预赛(8/11)
ACM-ICPC 2018 徐州赛区网络预赛 A.Hard to prepare 枚举第一个选的,接下来的那个不能取前一个的取反 \(DP[i][0]\)表示选和第一个相同的 \(DP[i][1]\) ...
随机推荐
- ACM学习历程—ZOJ3785 What day is that day?(数论)
Description It's Saturday today, what day is it after 11 + 22 + 33 + ... + NN days? Input There are ...
- android开发 解析服务器端xml文件数据存储到android客户端SQLite数据库
以下面xml文件为例对其解析(假设此xml就在服务器端Server项目下的servlet包下的MenuServlet文件的输出流中): <?xml version="1.0" ...
- grep的用法(转)
grep参数 -c : 显示匹配的行数(就是显示有多少行匹配了): -n :显示匹配内容所在文档的行号: -i :匹配时忽略大小写: -s :错误信息不输出: -v :输出不匹配内容: -o : ...
- UIButton常见用法
//UIButton是iOS中用来响应用户点击的控件,既可以显示文字,也可以显示图片,也可以处理用户交互 //UIButton的创建,一般采用类方法来创建,不需要释放 //UIButton 也是UIC ...
- JAVA 1.5 并发之 BlockingQueue
1.BlockingQueue 顾名思义就是阻塞队列 最经典的使用场合就是 生产者 - 消费者 模型啦,其优点是队列控制已经处理好,用户只需要存(满了会阻塞),取(空了会阻塞) 可以更多的关心核心逻辑 ...
- Spring 学习十五 AOP
http://www.hongyanliren.com/2014m12/22797.html 1: 通知(advice): 就是你想要的功能,也就是安全.事物.日子等.先定义好,在想用的地方用一下.包 ...
- js---倒计时的自动跳转.html
============================================================================== 倒计时的自动跳转.html <!DO ...
- 每天一道算法题(4)——O(1)时间内删除链表节点
1.思路 假设链表......---A--B--C--D....,要删除B.一般的做法是遍历链表并记录前驱节点,修改指针,时间为O(n).删除节点的实质为更改后驱指针指向.这里,复制C的内容至B(此时 ...
- C++之Stack模板类
假设有这样一种情况:某人将一车文件交给小王.倘若小王的抽屉是空的,那么小王从车上取出最上面的文件将其放入抽屉:倘若抽屉是满的,小王从抽屉中取出最上面的文件,放入垃圾篓:倘若抽屉即不空也未满,那么小王抛 ...
- mysql主从服务器复制操作
master主机ip:192.168.1.19 用户名sunzy 密码123456slave主机ip:192.168.1.20 1.配置master1)接下来对master进行配置,包括打开二进制日 ...