随笔分类 - Recommend
摘要:题意:其中n表示楼的高度,m表示你现在拥有的鸡蛋个数。 解法:f[i][j]表示 i 层楼有 j 个鸡蛋时,至少要扔多少次。3重循环,k为测试的楼层,分这时扔下去的鸡蛋碎和不碎的情况。要注意初始化。
阅读全文
摘要:题意:一个无限大的方格矩阵,能向北、东、西三个方向走。问走N步共有多少种不同的方案。 解法: f[i]表示走 i 格的方案数。 状态转移方程推导如下——设l[i],r[i],u[i]分别为第 i 步向西、东、北的方案数,f[i]为总方案数。l[i]=l[i-1]+u[i-1], r[i]=r[i-1
阅读全文
摘要:题意:求取到总和为K的倍数的糖果的最大值。 解法:用模K的余数作为一个维度,f[i][j]表示在前i种糖果中取到总颗数模K余j的最大总颗数。 注意——f[i-1][j]要正常转移,而其他要之前的状态存在才能状态转移。
阅读全文
摘要:题意: 给两个字符串,可以增、删、改,问使这两个串变为相同的最小操作数。 解法:(下面2种的代码主要区别在初始化和,而状态转移方程大家可挑自己更容易理解的方法打) 1.f[i][j]表示a串前i个和b串前j个完成匹配的最小操作数。 2.f[i][j]表示a串前i-1个和b串前j-1个完成匹配的最小操
阅读全文
摘要:题意我就不写了。解法有3种: 1.O(n^2)。2重循环枚举 i 和 j,f[i]表示前 i 位必选 a[i] 的最长上升子序列长度,枚举a[j]为当前 LIS 中的前一个数。 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4
阅读全文
摘要:最开始我想的是全排列+枚举符号和括号的方法,但是我自己倒腾了很久还是打不对,只好向他人请教。正解很机智——直接随意将几个数“捆绑”在一起,值存在其中一个数上,其他数标记不可再选,直到只剩下一个数,再判断这个数是否为24。
阅读全文
摘要:题意:给一个n个点的图和一个n个点的树,求图和树上的点一一对应的方案数。(N<=17) 解法:1.在树的结构上进行tree DP,f[i][j]表示树上点 i 对应图上点 j 时,这个点所在子树的方案数。O(n^3)。 2.我们可以发现如果按这个定义进行DP,“一 一对应”的关系挺难保证。若枚举出全
阅读全文
摘要:这题是在01背包问题的基础上,扩充了重量,需要用时间换空间。 思路: 1.仔细看题,注意到重量wi为a*2^b(a<=10,b<=30),很容易想到要按 b 分开做背包的DP。接下来的重点就是怎么使DP从b-1继承到b。 2.再仔细看题,发现只有一次询问,那么就可以在这个W上做文章——依W的大小进行
阅读全文
摘要:n个数,求一次逆序对。接着有m次修改操作,把每次输入的位置p的数之后<=它的数取出来,从小到大排序后再放回空位里,求逆序对。(N,M<=500,000 , Ai<=10^9)思路:1.往后修改就存后缀,而不是一般的前缀。存数 i 之后<=它的数的个数为s[i],用于后续求逆序对。2.修改时选出的数排
阅读全文
摘要:对于noi上的题有2种解法: 1.数据很小(N=100),可以直接打for循环枚举和判断。 2.不会“三分”,便用二分。利用“两根相差>=1”和 f(x1)*f(x2)<0,转换意思为[x,x+1]内不会包含两个根,这样枚举可以保证不漏解。因此,枚举一个个根所在的区间,再用二分枚举找出根。其中,若N
阅读全文

浙公网安备 33010602011771号