摘要:
巴什博弈 今天打比赛的时候做到的,下来去看了一些资料,感觉蛮有意思的(学好了可以用来坑钱) 两个顶尖聪明的人在玩游戏,有n个石子,每人可以随便拿1−m个石子,不能拿的人为败者,问谁会胜利。 当石子有1−m个时,毫无疑问,先手必胜。 当石子有m+1个时,先手无论拿几个,后手都可以拿干净,先手必败。 当 阅读全文
摘要:
有时候做题需要优化程序,经常遇到有重复的计算,比较影响时间复杂度,于是这里引入容斥原理。 先让我们来看看百度对他的解释: 具体是通过数学归纳法来证明的。 码道题: https://www.51nod.com/Challenge/Problem.html#problemId=1284 阅读全文
摘要:
先在小区间DP得到最优解,再合并小区间求大区间最优解,一般把左右两个相邻的子区间合并,需要从小到大枚举所有可能的区间。 https://vjudge.net/problem/51Nod-1021 先举个栗子: 有一二三堆石子,这个时候第一步有两种合并的方法,分别是1和2合并,2和3合并,那么最后应该 阅读全文
摘要:
http://120.78.128.11/Problem.jsp?pid=1852 一开始我想,从上往下的话,可以用递归,搜索(dfs)所有可能的路径,代码如下: int dfs(int i,int j){ if(i==n)//递归到最后一层时返回 return a[i][j];//a[i][j]存 阅读全文
摘要:
最长递增子序列(LIS) http://120.78.128.11/Problem.jsp?pid=1388 http://acm.hdu.edu.cn/showproblem.php?pid=1257 最长递增子序列,例如X={5,6,7,4,2,8,3},它的最长递增子序列为{5,6,7,8}, 阅读全文
摘要:
最长公共子序列(LCS) 放题: http://acm.hdu.edu.cn/showproblem.php?pid=1159 首先,子序列是在给定序列中删去若干元素后得到的序列,例如X=(A,B,C,D,E),那么(A,B,D)就是X的子序列,那(A,B,D)是子串吗?不是,子串的元素在原序列中是 阅读全文
摘要:
0/1背包 如果每个物体可以切分,称为一般背包问题,用贪心法求最优解,从最大的最多的开始。 如果每个物体不可分割,称为0/1背包问题。0和1代表装入背包和不装入背包。 举个栗子:有4个物品,其重量分别是2、3、6、5,价值分别为6、3、5、4,背包的容量为9。 先定一个二维数组dp[i][j],i代 阅读全文
摘要:
硬币问题 n种硬币,面值v1,v2...vn,数量无限,输入s,使最少的硬币组合之和为s。(贪心解决的硬币问题使特殊面值,此处面对任意面值) Min[i]是金额i对应的最少硬币数量,易得Min[i]=min(Min[i],Min[i-1]+1)。(如果面值是1的话) 从Min[i-1]到Min[i] 阅读全文
摘要:
分治法 把大问题化成小问题逐个解决,可以优化算法复杂度(局部的优化有利于全局,一个问题的解决,其影响力扩大了k倍,即扩大到了全局)。 归并排序 (1)分解:把原来无序的数列分成两部分,对每个部分再继续分解成更小的两部分,直到子序列只包含1个数,这个过程用递归实现(在归并排序中,只是简单地把数列分成两 阅读全文
摘要:
http://www.fjutacm.com/Problem.jsp?pid=2411 看到这题,我第一反应简单啊,刷刷刷把代码敲好交了一发 #include<stdio.h> #include<string.h> int main() { char s1[200000],s2[200000],s3 阅读全文