洛谷 P1199 三国游戏 题解】的更多相关文章

 这个题尽管题目长,主要还是证明贪心的正确性(与博弈关系不大) 题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有$N$位武将($N$为偶数且不小于4),任意两个武将之间有一个“默契值”,表示若此两位武将作为一对组合作战时,该组合的威力有多大.游戏开始前,所有武将都是自由的(称为自由武将,一旦某个自由武将被选中作为某方军队的一员,那么他就不再是自由武将了),换句话说,所谓的自由武将不属于任何一方. 游戏开始,…
每日一题 day18 打卡 Analysis 贪心 假如小A先选最大的[5,4],虽然电脑必须选一个破坏, 我们可以理解为5和4都属于小A的,假如后面未被破坏的最大值无论是和5相关还是和4相关,必然还是属于小A先手. 写个极限情况,假设6个武将的最大值序列依次为[1,2],[3,4],[5,6],电脑肯定要破坏掉这三种选择.后面第四个值无论是哪个组合,小A必然能通过先手在第二次或第三次先选到这两个武将,也就是说选择的总次数不会超过n/2. 因此,只要将武将组合值排序,由大到小依次选择下去,一定会…
题目传送 显然,在这样的数据范围下搜索是没希望的了.好好分析一下,发现小涵时不可能拿到与一个武将最默契的另一个武将了.所以考虑一下默契值次大的一对武将. 显然,对每一个武将来说,小涵是可以拿到默契值次大的武将.如果小涵拿到所有默契值次大的武将组合中最大的那个组合M会怎样? 考虑当小涵拿到所有默契值次大的武将组合后计算机的行动:计算机一定会去拿能跟小涵最后拿的武将组成目前最默契组合的自由武将.这个自由武将一定会与计算机第一次拿到的那个武将组成一个组合,这是人无法阻止的.考虑一下这个组合的默契值大小…
P1199 三国游戏 题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有\(N\)位武将(\(N\)为偶数且不小于4),任意两个武将之间有一个"默契值",表示若此两位武将作为一对组合作战时,该组合的威力有多大.游戏开始前,所有武将都是自由的(称为自由武将,一旦某个自由武将被选中作为某方军队的一员,那么他就不再是自由武将了),换句话说,所谓的自由武将不属于任何一方. 游戏开始,小涵和计算机要…
题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之间有一个“默契值”,表示若此两位武将作为一对组合作战时,该组合的威力有多大.游戏开始前,所有武将都是自由的(称为自由武将,一旦某个自由武将被选中作为某方军队的一员,那么他就不再是自由武将了),换句话说,所谓的自由武将不属于任何一方. 游戏开始,小涵和计算机要从自由武将中挑选武将组成自己的军队,规则如下:小涵先…
参考:Solution_ID:17 题解 更新时间: 2016-11-13 21:01 这道题要求最后得到的两方的默契值最大的武将,小涵的默契值大于计算机,首先,我们这个解法获胜的思路是,每个武将对应的所有配对值中最大的值,已经被拆散 在这种情况下,场上存在的只剩所有的“次大值”,就是我们拿来排序的那一堆这时候小涵拿到了“次大值”中的最大值,肯定是场上最高的分数策略就是:先考虑最开始的情况: 1.从武将中找出武将i,记下与i的默契值第二大的武将j,使得i与j的默契值最大2.小涵选出i,那么计算机…
题目 博弈论+贪心. 由于我们是先手,所以我们其实是必赢的,而且其实选完前两次,就已经结束了,因为接下来选的每一次其实都没有我们前几次选的好.而且又因为机器人会把我们想选的最好的拿走,那我们就只能拿走次好的了.然后枚举排序就可以得出答案. \(Code\) #include <bits/stdc++.h> #define int long long using namespace std; int data[1010][1010]; queue <int> q; int ans,…
题目:https://www.luogu.org/problemnew/show/P1199 仔细想想,两方都拿不到每个武将的配对中最大的: 本来想的是如果有武将a,b,对应最大ma,mb,次大ca,cb,那么自己选了a,电脑选了mb,接下来自己选b,若mb<ca,则电脑选了ca,自己就可以选mb,也就是选了一组最大武将: 但仔细一想,这样还不如第二步去选ca...... 所以自己只要设计一下,选到次大武将中最大的一组,就必胜了. 代码如下: #include<iostream> #in…
题目 这个题表面上看并不像DP,但是当我们看到方案数时,我们可能会想到什么??? 对,分类加法原理,在每一轮中,每一个点的方案数都要加上这个点左边的方案与右边的方案. 因此我们可以枚举,设一个DP数组DP[i][j]表示在第i轮j这个位置的的方案数,最后输出DP[m][1]; 代码: #include <iostream> #include <cstdio> using namespace std; ][]; int main() { int n,m,x,y; scanf(&quo…
题目 这道题是一个简单的模拟搜索题,可以把每个雷的位置都记作1. 这样就可记录出数字啦 #include<iostream> #include<cstring> using namespace std; int n,m; char a; bool b[10000][11000]; int i ,j; int main() { cin>>n>>m; memset(b,0,sizeof(b)); for( i=1; i<=n; i++) for( j=1;…