洛谷P1123取数游戏题解】的更多相关文章

题目 这是一道简单的搜索题,考查的还是比较基础的东西,其时搜索有时候并不难写,主要是要想到怎么搜.比如这个题,如果想二维四个方向搜则没有头绪,反之因为搜索是用递归实现的,所以我们可以使用递归的特性,把大问题处理成小问题来解决. 所以我们可以用处理每一行的形式,把这一行的最大值求出来,再接着向下一行搜,中途再加上回溯操作,这道搜索就做完了. \(Code\) #include <iostream> #include <cstdio> #include <algorithm>…
P1123 取数游戏 题目描述 一个N×M的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻8个格子中的一个即认为这两个数字相邻),求取出数字和最大是多少. 输入输出格式 输入格式: 输入第1行有一个正整数T,表示了有T组数据. 对于每一组数据,第1行有两个正整数N和M,表示了数字矩阵为N行M列. 接下来N行,每行M个非负整数,描述了这个数字矩阵. 输出格式: 输出包含T行,每行一个非负整数,输出所求得的答案. 输入输出样例 输入样…
题目链接:https://www.luogu.org/problemnew/show/P1123 转载于:>>>>>> 题目描述 一个N×M的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻8个格子中的一个即认为这两个数字相邻),求取出数字和最大是多少. 输入格式: 输入第1行有一个正整数T,表示了有T组数据. 对于每一组数据,第1行有两个正整数N和M,表示了数字矩阵为N行M列. 接下来N行,每行M个非负整…
题目描述 一个N×M的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻8个格子中的一个即认为这两个数字相邻),求取出数字和最大是多少. 输入输出格式 输入格式: 输入第1行有一个正整数T,表示了有T组数据. 对于每一组数据,第1行有两个正整数N和M,表示了数字矩阵为N行M列. 接下来N行,每行M个非负整数,描述了这个数字矩阵. 输出格式: 输出包含T行,每行一个非负整数,输出所求得的答案. 输入输出样例 输入样例#1: 3 4 4…
洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 否则先手必败. #include<stdio.h> #include<string.h> using namespace std; const int maxn = 25; int a[maxn], n, ans…
题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流取数,取数的规则如下: (1)选择硬币左边或者右边的一条边,并且边上的数非0: (2)将这条边上的数减至任意一个非负整数(至少要有所减小): (3)将硬币移至边的另一端. 如果轮到一个玩家走,这时硬币左右两边的边上的数值都是0,那么这个玩家就输了. 如下图,描述的是Alice和Bob两人的对弈过程,…
题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流取数,取数的规则如下: (1)选择硬币左边或者右边的一条边,并且边上的数非0: (2)将这条边上的数减至任意一个非负整数(至少要有所减小): (3)将硬币移至边的另一端. 如果轮到一个玩家走,这时硬币左右两边的边上的数值都是0,那么这个玩家就输了. 如下图,描述的是Alice和Bob两人的对弈过程,…
题目链接:https://www.luogu.org/problem/P1288 首先,如果你的一边的边是 \(0\) ,那么你肯定走另一边. 那么你走另一边绝对不能让这条边有剩余,因为这条边有剩余的话队首再走回来并去掉所有的值那么你就输了. 因为大家都绝对聪明,所以会选择将走过的边全部取完. 那么现在就面临着一个问题,你一开始要么往左走,要么往右走. 所以需要记录一下往左走的边数和往右走的边数,只要有一条路的边数是奇数,则先手赢:如果两条边都是偶数,则奇数赢. 实现代码如下: #include…
原题链接 因为保证有\(0\)权边,所以整个游戏实际上就是两条链. 很容易发现当先手距离\(0\)权边有奇数条边,那么必胜. 策略为:每次都将边上权值取光,逼迫后手向\(0\)权边靠拢.若此时后手不取光边权,那么先手只需把后手没有取光的边取光,即把硬币移回去就能让后手五路可走:若后手也取光边权,那么先手只需继续取光边权即可,后手必定会到达\(0\)权边的起点,无路可走. 反之,若先手距离\(0\)边权有偶数条边,那么必输. 因为无论先手怎么走,都会使得后手距离\(0\)权边有奇数条边,即后手有必…
奇奇怪怪的游戏,不多写了 #include<cstdio> ]; int main() { int i; scanf("%d",&n); ;i<=n;i++) scanf("%d",&a[i]); ;l1<=n;l1++) ) break; ;r1--) ) break; l1--; r1++; r1=n-r1+; if(l1==n) { ==) puts("YES"); else puts("N…
题目 博弈论. 考虑先手和后手的关系.然后可以通过统计数值不是0的数的个数来得出答案. \(Code\) #include <bits/stdc++.h> using namespace std; int main() { int n, ans = 0, a[1010]; scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); if (a[i] == 0…
题面 在做这道题前,先要会他的弱化版(实际一模一样,只是愚蠢的洛谷评测级别差了一档(睿智如姬无夜)) ----------------------------------弱化版--------------------- 弱化版 实际只是把矩阵行数改成两行而已 sol:先排序,后考虑一个序列a[1]+b[1],a[2]+b[1],a[3]+b[1],······,a[n-1]+b[1],a[n]+b[1]; 显然对于上一个序列而言 a[1]+b[1]<=a[1]+b[2], a[2]+b[1]<…
P2252 取石子游戏 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.现在给出初始的两堆石子的数目,你先取,假设双方都采取最好的策略,问最后你是胜者还是败者. 这题比较狗☞,要开$long$$long$ 所谓的威佐夫博弈,貌似应用的只是他的结论,两个绝绝顶聪明的人,在玩一个灰常高大上的游戏——取石子, 即给你两堆石子,两个人轮流取,可以取走其中…
题目传送门 取数 题目描述 在一个n行m列的数阵中,你须在每一行取一个数(共n个数),并将它们相加得到一个和.对于给定的数阵,请你输出和前k小的取数方法. 输入输出格式 输入格式: 第一行,三个数n,m,k. 第2~n+1行,每行m个正整数 输出格式: 一行共k个数,代表在每一行取一个数前k小的加和 输入输出样例 输入样例#1: 复制 3 3 2 1 2 3 6 3 5 4 1 2 输出样例#1: 复制 5 6 说明 对于20%的数据,n≤8 对于100%的数据,n≤800,k≤m≤800 分析…
题目传送门 暴力 \((\)由于我这样的初中蒟蒻不\((bu)\)喜\((hui)\)欢\((xie)\)数学证明,所以题解中的证明全是其他大佬的题解已经多次证明过的,这里就不再啰嗦了.\()\) ------逗比与正经的分界线→_→------ 思路: 就是先判断是否先手必胜,如果不是,就直接输出\(lose\),如果是的话,一根一根的取,就能得到正解啦!注释详见代码. 优化前的90分TlE代码: #include<iostream> #include<cstdio> #incl…
经典NIM游戏. 取XOR和即可. 注意输出方案时,找到大于异或和sum的,变为a[i] ^ sum即可. #include <cstdio> ; int a[N]; int main() { ; scanf("%d", &n); ; i <= n; i++) { scanf("%d", &a[i]); sum ^= a[i]; } if(!sum) { printf("lose"); ; } ; i <=…
题目背景 无 题目描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.现在给出初始的两堆石子的数目,你先取,假设双方都采取最好的策略,问最后你是胜者还是败者. 输入输出格式 输入格式: 输入共一行. 第一行共两个数a, b,表示石子的初始情况. 输出格式: 输出共一行. 第一行为一个数字1.0或-1,如果最后你是胜利者则为1:若失败则为0:若结…
题目:https://www.luogu.org/problemnew/show/P1247 可以知道必败局面为n[1]^n[2]^...^n[k]=x=0: 而若x不等于0,则一定可以取一次使其变为0,所以此时为必胜: 取火柴数即为n[i]^x,取掉后异或和变为0: 因为取火柴数为正数,所以要n[i]>n[i]^x. 代码如下: #include<iostream> #include<cstdio> using namespace std; ],x; int main()…
https://www.luogu.org/problemnew/show/P4562 https://www.lydsy.com/JudgeOnline/problem.php?id=5323 (BZOJ有点卡常数过不去.)时限已经开大. 实际上我们只需要求出l-r区间内有多少数是满足不存在l-r内的数a使得i*a=这个数. 我们欧拉筛实际上就是一个数可以分解成的最大的两个数(其中一个是最大质数)的乘积,于是我们判断那个合数是否<l且这个数是否在l~r的区间内,如果满足则这个数就是我们要求的.…
题目链接:https://www.luogu.org/problemnew/show/P1129 分析: 这道题不是很好想,但只要想的出来,代码不成问题. 思路1 举几个例子,我们发现, 对于任何数来说,同一行的永远在同一行,同一列的永远在同一列 进一步研究,发现所有行所有列要有1,且至少要有n个1两两不同行不同列 对于每个111,设坐标为(x,y)(x,y)(x,y),那么xxx行向yyy列连边 判断是否有完全匹配(都能匹配上),能匹配上就可以 思路2 这个就是比较拓展的思路了,如果你学了高等…
题目链接: https://www.luogu.org/problemnew/show/P1640 分析: 这道题用二分图来解决即可.应该可以作为网络流中的模板题来食用, 每一个武器有两个属性,但是只能取一个用,由此我们便可以想到与二分图挂钩. 二分图匹配当中,一个点只能和一个点匹配 问题当中要从小到大使用所有属性,所以肯定要有以1-10000属性为点的一侧 把装备放在另一侧,装备和它的两个属性连边. (也就相当于从左到右一连,再从右到左一连,才相当于用了两个属性. 从小到大匹配属性点, 因为题…
P1102 A-B 数对 题目描述 出题是一件痛苦的事情! 题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈! 好吧,题目是这样的:给出一串数以及一个数字 C,要求计算出所有 A-B=C 的数对的个数.(不同位置的数字一样的数对算不同的数对) 输入格式 第一行包括2个非负整数N和C,中间用空格隔开. 第二行有N个整数,中间用空格隔开,作为要求处理的那串数. 输出格式 输出一行,表示该串数中包含的所有满足A-B=C的数对的个数. 输入输出样例 输入 #…
题目链接 https://www.luogu.org/problemnew/show/P1005 分析 忽然发现这篇题解好像并没有什么意义...因为跟奶牛零食那道题一模一样,博主比较懒如果您想看题解的话去区间DP标签中找奶牛零食那道题吧,实在抱歉... 话说NOIP喜欢考奶牛题啊(e.g. NOIP2017 D1T1),USACO刷完是不是就能阿克了呀 代码没写高精用__int128代替,话说什么时候补个高精的坑(flag) 代码 #include <cstdio> #include <…
题目链接:https://www.luogu.org/problem/P1488 其实这道题目我只需要 \(n\) 以及黑色三角形的三个端点编号就可以了. 我们假设在一个 \(n\) 边形中,黑色三角形的端点号分别是 \(a_0, a_1, a_2\) ,且 \(a_0 \lt a_1 \lt a_2\) ,那我其实可以知道: \(a_0 - a_1\) 边外围的三角形个数是 \(b_0 = a_1 - a_0 - 1\) : \(a_1 - a_2\) 边外围的三角形个数是 \(b_1 = a…
**原题链接** 题目描述 设有n个正整数(n ≤ 20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213 又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613 输入描述: 第一行,一个正整数n. 第二行,n个正整数. 输出描述: 一个正整数,表示最大的整数 分析: 要用一组正整数组成一个最大的多位整数,很自然的想到给这组正整数 按字典序排序,然后按字典序从大到小把这组正整数连接起来. 但,我…
无法用复杂状态进行转移时改变计算方式:巧妙的整体考虑:压缩空间优化时间 传送门:$>here<$ 题意 给出一个n*m矩阵,从每一行选一个数加起来,可以得到一个和.易知总共会有$n^n$个和,输出最小的k个. 数据范围:$n,m \leq 800,k \leq m$ Solution 问题的转化 序列合并问题是这道题的弱化版——也就是在这道题目里规定n=2.这样的问题做法是先分别排序,然后默认a[1]与b[1..n]相加得到的n个和为最小,然后分别用其他的和去更新.由于单调性,a[i]一旦不能…
传送门 # 4.24一个重要的日子.我人生中第一道7个测试点下载了5个的题目被我发现了,第一次用光下载数据点机会,真心坑点重重. 这题是一道很经典的贪心题目,可能是因为我太蒻了,导致我一直以为最少普及难度. 我用了几乎从未用过的"指针"(加这->  ""  <-个的原因是这个“指针”是模拟指针): 这个题的贪心策略应该都明白:找第一个开始下降的那个数删,如果一直上升删最后一个.原理就不解释了: 这个题每个字符设一个指针,指向他的下一个(不是下一个字符而是…
题目描述 一个N \times MN×M的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻88个格子中的一个即认为这两个数字相邻),求取出数字和最大是多少. 输入格式 第1行有一个正整数TT,表示了有TT组数据. 对于每一组数据,第一行有两个正整数NN和MM,表示了数字矩阵为NN行MM列. 接下来NN行,每行MM个非负整数,描述了这个数字矩阵. 输出格式 TT行,每行一个非负整数,输出所求得的答案. 输入输出样例 输入 3 4 4…
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2.每次取走的各个元素只能是该元素所在行的行首或行尾: 3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值*2^i,其中i表示第i次取数(从1开始编号): 4.游戏结束总得分为m次取数得分之和. 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分. 输入输…
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2.每次取走的各个元素只能是该元素所在行的行首或行尾: 3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值*2^i,其中i表示第i次取数(从1开始编号): 4.游戏结束总得分为m次取数得分之和. 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分. 输入输…