- 博客(173)
- 收藏
- 关注
原创 hdu5730 Shell Necklace
题目:一段长为i的项链有a[i]种表达爱意的装饰方法,问长度为n的项链有多少种用上述方式组成的方法。思路:dp[i]=∑dp[j]*a[i-j],(1要用fft+CDQ分治代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#i
2017-10-18 00:48:21 594
原创 ACdream - 1157 Segments
题目:由3钟类型操作:1)D L R(1 2)C i (1-base) 删除第i条增加的线段,保证每条插入线段最多插入一次,且这次删除操作一定合法3) Q L R(1 给出N,接下来N行,每行是3种类型之一思路:时间为第一位分治,然后用左区间去更新右区间代码:#pragma comment(linker, "/STACK:1024000000,102400000
2017-10-17 23:55:13 408
原创 bzoj2726 任务安排
题目:机器上有N个需要处理的任务,它们构成了一个序列。这些任务被标号为1到N,因此序列的排列为1,2,3...N。这N个任务被分成若干批,每批包含相邻的若干任务。从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti。在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和。注意,同一批任务将在同一时刻完成。每个任务的费用是它的完成时刻乘以一个费用系
2017-10-17 17:50:41 549
原创 hdu5977 Garden of Eden
题目:点击打开链接给你一棵n个节点的树,一共有k种颜色,每个节点有一种颜色,求a到b的路径中经过了所有颜色的路径的对数,(a,b)和(b,a)都要算思路:树分治+状态压缩+枚举子集代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#includ
2017-10-16 21:25:47 416
原创 bzoj1492 货币兑换Cash
题目:点击打开链接思路:令f[i]表示第i天的最大获利,fx[i]表示在第i天最多拥有几张A券,fy[i]表示对应的B券,那么f[i]=max{fx[j]*a[i]+fy[j]*b[i]}。另外,有fy[i]=f[i]/(a[i]*rate[i]+b[i]) fx[i]=fy[i]*rate[i]。令fx[j] fx[j]*a[i]+fy[j]*b[i]-a[i]/b[i]。令
2017-10-16 21:19:41 353
原创 bzoj3110 K大数查询
题目:有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。NM思路:二分答案,要用到树状数组区间更新代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#includ
2017-10-11 23:46:32 287
原创 HDU - 5618 Jam's problem again
题目:给你n个点(x,y,z),让你输出对于每个点(xi,yi,zi)满足xj思路:先按照x排序,然后做分治的时候针对y排序,这样会漏掉相等的点对其左边的点的影响,做一下预处理即可代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include
2017-10-09 23:19:10 325
原创 bzoj3295 动态逆序对
题目:对于序列A,它的逆序对数定义为满足iAj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。思路:如果倒着看的话,就变成了插入操作,第一个删除的数使最后一个插入的数,我们用来表示每个插入操作,x表示插入位置,y表示插入的数,t表示插入的时间,对时间进行二分操作,每次保证左边区间的时间都小于右边区间的时间,并且每
2017-10-08 23:11:47 368
原创 POJ - 2104 K-th Number
题目:给你一个n个数的序列,m个询问,每次询问为i,j,k,问区间[i,j]中的数按升序排序后,第k个数是什么思路:CDQ分治,整体二分答案代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#i
2017-10-08 16:10:10 265
原创 HDU - 2829 Lawrence
题目:将一个序列分成m+1段,每段的价值定义为任意两个数的乘积之和,求总的最小价值思路:cost[i][j]表示i到j成为一段的价值设dp[i][j]表示前j个数分成i段的最小价值dp[i][j]=min{dp[i-1][k]+cost[k+1][j]}cost[1][i]=cost[1][k]+cost[k+1][i]+sum[k]*(sum[i]-sum[k])将cos
2017-10-07 00:28:18 347
原创 HDU - 3480 Division
题目:给你n个数,将其分为m组,每组的价值定义为最大值与最小值的差值的平方,求总价值最小思路:首先将n个数从小到大排序。然后设 dp[i][j]表示前j个数分成i组的最小花费。则 dp[i][j]=min{dp[i-1][k]+(a[j]-a[k+1])^2} 0利用斜率优化DP,整理下就可以出来了。代码:#pragma comment(linker, "/STA
2017-10-06 17:57:15 316
原创 HDU - 3045 Picnic Cows
题目:有n个数,要分成若干组,每组至少L个数,每组的价值定义为每个数减去该组数的最小值的和,求各组数的价值和的最小值思路:先对序列arr按从小到大排序,求出前缀和设dp[i]表示前i个数的合法分组的最小值dp[i]=min{dp[j]+sum[i]-sum[j]-arr[j+1]*(i-j)},j然后就是斜率优化了代码:#pragma comment(linker, "
2017-10-05 22:24:40 315
原创 HDU - 3507 Print Article
题目:要输出序列a[n],每连续输出一段连续子序列的费用是连续输出的数字和的平方加上常数M,让我们求总 费用的最小值。思路:参考:http://www.cnblogs.com/kuangbin/archive/2012/08/26/2657650.html设dp[i]表示输出前i个的最小费用,那么有如下的DP方程:dp[i]= min{ dp[j]+(sum[i]-sum[j])^
2017-10-05 16:37:17 309
原创 HDU - 1538 A Puzzle for Pirates 海盗分金
题目:有n个海盗,分m块金子,其中他们会按一定的顺序提出自己的分配方案,如果50%以上的人赞成,则方案通过,开始分金子,如果不通过,则把提出方案的扔到海里,下一个人继续。从第n个人开始决策,问第p个人能分多少金子,或是被扔到海里思路:参考http://blog.csdn.net/acm_cxlove/article/details/7853916 的博客做出来的,写的很详细代码:
2017-10-03 14:23:25 431
原创 POJ - 3317 Stake Your Claim 极大极小搜索+alpha-beta剪枝+记忆化搜索
题目:给出一个n*n包含0或1或.的矩阵,两个依次找一个空格子,放入0和1,最终看连通0多还是连通的1多,得分是一个选手的最大连通数减去另一个选手的。问当前局面的操作者能够得的最大的分数,及最大分数下最小字典序的操作。思路:有的说alpha-beta剪枝和记忆化搜索不能一起使用,有的说只要把参数记下来就可以一起用 代码:#pragma comment(linker, "/STACK:
2017-10-02 22:47:45 487
原创 POJ - 1568 Find the Winning Move 极小极大搜索+alpha-beta剪枝
题目:在一个4*4的格子里面,x和o两个人玩游戏,x画'x',o画'o',x先手,给定x和o都已经画了一定步数的局面,问x是不是必胜的,如果是,输出他应该画在哪个位置思路:极小极大搜索+alpha-beta剪枝代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#in
2017-10-02 15:44:58 341
原创 POJ - 1085 Triangle War 极小极大搜索+alpha-beta剪枝
题目:有一个这样的图形一共10个顶点,有A,B两个玩家,A先手,每次每个玩家可以选择连接2个相邻但是没连接的顶点,构成的三角形属于当前操作者,并且可以额外再操作一次,谁拥有的三角形数目多谁胜。给出前面的一些操作,问你是A胜还是B胜思路:极小极大搜索+alpha-beta剪枝给两个相邻顶点的边编个号,一共有18条边分别编号为0~17,9个三角形,可以用三角形的三条边的二进制和表示
2017-10-01 23:10:23 364
原创 ZOJ - 1039 Number Game 状态压缩
题目:2-20这19个数字的游戏。每取走一个数之后,这个数的倍数便不能再取,而且某两个取过的数的倍数的和,也不能再取。给出当前可取数字的状态,问当前状态是不是先手必胜状态。如果是,输出取法思路:利用NP状态定理和状态压缩做。代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#incl
2017-09-30 23:14:47 430
原创 ZOJ - 3057 Beans Game NP状态定理
题目:有3堆石子,分别有a,b,c个石子,两个游戏者轮流操作,每次可以选择取走某一堆x个石子,或选择某2堆石子在2堆石子中取走相同数目的石子。问先手必胜(输出1),还是先手必败(输出0)。思路:利用NP状态定理,把所有状态预处理出来代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#
2017-09-30 16:15:02 509 1
原创 ZOJ - 3591 Nim
题目:给你N,S,W,让你按照以下代码造出序列arr[i],int g=S; for(int i=0;i arr[i]=g; if(arr[i]==0) arr[i]=g=W; if(g%2==0) g=g/2;
2017-09-30 14:30:54 435
原创 ZOJ - 3529 A Game Between Alice and Bob 数论+博弈
题目:有N堆石头,每次选中某一堆,把数量替换成原先的因子。全部为1则结束。思路:每个数都有一定数量的质因子数目,将其替换成因子,就相当于拿走了几个质因子,就转换成了NIM博弈,每堆石子的个数为该数的质因子的数目。代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#includ
2017-09-29 01:49:46 374
原创 ZOJ - 2686 Cycle Game
题目:有一个n个节点的环,相邻节点间的边上有个非负整数,至少会存在一个0,有一枚硬币,其初始位置在0处,每个人可以让硬币移动到他的2个相邻节点中的一个上去,但是要求边上的整数是一个正数才可以移动,移完之后,将边上的整数减去一个数,不能移动的人输,轮流操作。先手必胜输出YES,先手必败输出NO思路:从硬币的所在位置出发,两个方向,如果某个方向连续的非0个数为奇数的话,先手必胜。先手的策略是,
2017-09-29 00:44:07 238
原创 POJ - 3710 Christmas Game tarjan+树的删边游戏
题目:有N个局部联通的图。Harry 和 Sally 轮流从图中删边,删去一条边后,不与根节点相连的部分将被移走。Sally 为先手。图是通过从基础树中加一些边得到的。所有形成的环保证不共用边,且只与基础树有一个公共点。谁无路可走谁输。思路:(1)对于长度为奇数的环,去掉其中任意一个边之后,剩下的两个链长度同奇偶,异或之后的SG值不可能为奇数,所以它的SG值为 1;
2017-09-28 19:51:12 328
原创 POJ - 2599 A funny game NP状态定理
题目:有一棵无向树,从某个结点出发,两个人轮流移动,走过的结点不能再走,不能移动的人输。判断先手必胜还是先手必败,如果先手必胜,输出必胜到达的节点。思路:利用NP状态定理,把起点的SG值算出来。代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#i
2017-09-28 16:07:14 799
原创 POJ - 2068 Nim NP状态定理
题目:有S个石子,有两个队,每个队有n个人,每个人每次有数量限制,取最后一个石子的输,0,2,4,6,...属于1队,其余的属于2队,按0,1,2,3,4,..,2n,0,1,2,....的顺序轮流操作,问先手必胜还是先手必败,1队先手。思路:利用NP状态定理解决代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#in
2017-09-28 15:34:45 373
原创 POJ - 1678 I Love this Game! 记忆化dp
题目:有n个数,有一个区间[a,b],第一个人先取一个数,必须在区间内,后一次取必须比第一个数大,而且差值在区间内。问最后两个人取的数的和的差值最大为多少。思路:枚举第一次选的数,score[i]表示先手选第i个数的最大差值代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#incl
2017-09-28 14:55:27 373
原创 POJ - 2311 Cutting Game SG函数
题目:给你一个w*h的矩形,每次可以选择横向或纵向切割矩形,将其分成2个矩形,N次操作后,就会有N+1个矩形,谁先切割出1*1谁就获胜。思路:谁先切割出1*1谁就胜,那么就是说谁切割出1*x或x*1谁就输了。然后求SG函数就可以了。代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#
2017-09-28 14:20:13 863
原创 HDU - 3590 PP and QQ 树的删边博弈+anti_sg
题目:n棵树的删边游戏,每次可以选择一棵树删边,与根节点不相连的边和节点会移走,进行最后一步操作的人输。思路:树的删边游戏:叶子节点的SG值为0;中间节点的SG值为它的所有子节点的SG值加1 后的异或和。ANTI-SG:先手必胜当且仅当:(1)游戏的SG函数不为0且游戏中某个单一游戏的SG函数大于1;(2)游戏的SG函数为0且游戏中没有单一游戏的SG函数大于1。代码:#pr
2017-09-28 14:01:38 324
原创 HDU - 3094 A tree game 树的删边博弈
题目:有一棵树,每一次操作有两步,第一步选择一条边删除,第二步把没有和根相连的边和点全部删除。不能进行操作的人输。思路:每一个节点的sg值都是其子节点的sg值加1的异或和代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#incl
2017-09-28 10:52:58 493
原创 HDU - 1524 A Chess Game 有向无环图上的博弈
题目:在有n个顶点的有向无环图上玩游戏,一些顶点上面有象棋,游戏者轮流操作,每次可以选择一个象棋将其移动到他的后继节点,不能进行操作的人输,问先手必胜还是先手必败。思路:把节点的sg值全部求出来就行了。代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#includ
2017-09-28 09:55:15 536
原创 HDU - 4111 Alice and Bob 求SG值
题目:有N堆石头,可以把两堆合成一堆,也可以把一堆去掉一个。问先手必胜还是先手必败思路:所有石子个数大于1的石子堆ai可以看成一堆石子数为sigma(ai)+n-1的堆,因为个数大于1的石子堆的合并,对方是无法阻挡的。但是1是可以阻挡的。每次的操作有:让石子数 为1的堆数减1合并堆的石子数减1合并两个个数为1的石子堆把1合并到合并堆上去代码:#pragma comm
2017-09-27 23:35:08 350
原创 HDU - 3595 GG and MM Every_SG游戏
题目:n个游戏同时进行,每个游戏有两堆石子,设个数少的那堆有x个石子,个数多的那堆有y个石子,那么每次从y中取走k*x个石子,要求k>0,且k*x思路:Every_SG游戏,可以看贾志豪的论文,里面讲得很详细代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#inc
2017-09-27 17:35:40 377
原创 HDU - 2999 Stone Game, Why are you always there? 求sg值
题目:给出一串连续的K个石头,一个集合allow,每次取出若干个连续的石头(数量必须为集合allow中的),最后取完的获胜,问有没有必胜策略。思路:求出sg值代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#i
2017-09-26 23:54:30 457
原创 HDU - 3404 Switch lights Nim乘法
题目:给定一个n*m的矩形,上面的坐标(x,y)满足0思路:看论文,论文上面有详细介绍,要用到nim乘法运算代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include
2017-09-26 09:39:34 340
原创 HDU - 2486 A simple stone game k倍动态减法游戏
题目:有n个石子,两个游戏者轮流操作,第一个操作的人最多能拿走n-1个石子,以后,每个游戏者最多能拿走前一个游戏者拿走数目的k倍,如果先手必败输出lose,否则输出必胜的情况下第一步拿走的石子数。(2思路:k=1时必败态是2^i。k=2时必败态是斐波那契数列。k>=3时要构造数列,将n写成数列中一些项的和,使得这些被取到的项的相邻两个倍数差距>k 那么每次去掉最后一个1 还是符合上面的
2017-09-25 09:27:27 624
原创 HDU - 2177 取(2堆)石子游戏 威佐夫博弈
题目:有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。如果你胜,你第1次怎样取子? Input输入包含若干行,表示若干种石子的初始情
2017-09-22 23:50:01 700
原创 HDU - 3032 Nim or not Nim?
题目:有n堆石子,Alice和Bob轮流操作,Alice先手,每次游戏者有2种选择,要么拿走其中的任意数目的石子,要么将石子堆分成2堆,谁拿走最后的石子谁胜思路:sg打表找规律代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#i
2017-09-22 22:06:09 257
原创 HDU - 2516 取石子游戏 斐波那契博弈
题目:1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。取完者胜.先取者负输出"Second win".先取者胜输出"First win". 思路:fib[1]=1,fib[2]=2,fib[i]=fib[i-1]+fib[i-2](i>=3)先手必胜当且仅当n不是Fibonacci数;反之,先手必败。代码:
2017-09-22 15:55:14 436
原创 HDU - 1525 Euclid's Game
题目:给定正数a,b,stan和ollie轮流操作,stan先手,每一轮,游戏者可以选择用2数中的最大值减去最小值的倍数(至少一倍),谁先减出一个0谁获胜思路:对于a,b,假设a>=b,那么局面上谁先出现a/b>=2谁就获胜,因为b,a%b肯定对应的是先手必胜或者先手必败,a/b>=2的情况下,你就可以决定是你面对b,a%b这个局面还是让对方面对这个局面代码:#pragma comme
2017-09-22 15:10:00 277
原创 HDU - 1079 Calendar Game
题目:从1900,1,1到2001,11,4中给出一个日期,游戏者轮流操作,每个人可以选择移到下一个日期,或者选择到下一个月的相同日历日,当然这都是在合理的情况下进行操作,谁先到达2001,11,4谁胜,问是否先手必胜思路:利用NP状态定理,直接预处理出来代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#includ
2017-09-22 11:19:35 301
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人