随笔分类 -  线性DP

AcWing 3583 整数分组(01背包 + 双指针)
摘要:原题链接 本题是比较明显的01背包,选或者不选,中间可以用双指针找到最后可以选到的区间长度,那么如果选当前最后一个区间的话最后就要求这个区间前面的长度要最大 状态表示: f[i][j]表示从区间1~i中选出j组 状态计算:这里可以画图看一下,我们如果选最后一段,那么最后一段长度是确认的,决定是否是最 阅读全文

posted @ 2022-11-08 15:27 chelly酱 阅读(53) 评论(0) 推荐(0)

AcWing 271杨老师的照相排列
摘要:思路 $1=<k<= 5$,所以最多会有五个位置,五个位置分配人,即集合为f[a][b][c][d][e]表示五个位置各放了a, b, c, d, e个人的方法的数量,同时h[1]>=h[2]>=h[3]>=h[4]>=h[5],所以后面的层也可以取到和上面一层一样的人数,但是不能超过,因此b<= 阅读全文

posted @ 2022-10-26 00:02 chelly酱 阅读(24) 评论(0) 推荐(0)

AcWing1016 最大上升子序列和
摘要:原题链接 其实就是在原本的Lis的基础上,将求的数量变成了求最大的和 #include <bits/stdc++.h> #define pb push_back #define fi first #define se second #define all(x) (x).begin(), (x).en 阅读全文

posted @ 2022-10-23 19:40 chelly酱 阅读(28) 评论(0) 推荐(0)

AcWing1012 友好城市
摘要:原题链接 /** * @Author: chelly * @Date: 2022-10-23 19:29:52 * * 对南北海岸随便一个进行从小到大的排序,然后对另一边做lis, * 如果另一边大小顺序不匹配就会出现交叉,就非法 */ #include <bits/stdc++.h> #defin 阅读全文

posted @ 2022-10-23 19:35 chelly酱 阅读(27) 评论(0) 推荐(0)

AcWing80 骰子的点数(线性dp)
摘要:#define pb push_back class Solution { public: vector<int> numberOfDice(int n) { int f[15][100]; // 投i次,总和为j的投掷可能 memset(f, 0, sizeof(f)); for (int i = 阅读全文

posted @ 2022-10-21 22:14 chelly酱 阅读(24) 评论(0) 推荐(0)

导航