随笔分类 - DP: 线形
摘要:每个孩子有一个贪婪度,第 i 个孩子的贪婪度为 g[i]。 如果有 a[i] 个孩子拿到的饼干数比第 i 个孩子多,那么第 i 个孩子会产生 g[i]×a[i] 的怨气。 给定 N、M 和序列 g,圣诞老人请你帮他安排一种分配方式,使得每个孩子至少分到一块饼干,并且所有孩子的怨气总和最小。 注意到怨
阅读全文
摘要:给定一个矩阵 求大小为k的凸多边形的权值最大值 轮廓线dp 思路很好想 但是细节很多 //错误点1: 为了保证必须有交集,q不应该从p+1开始枚举 而应该从l开始枚举 //错误点2: 左右边界相等的时候不是空集 而是大小为1的集合 枚举的时候要注意 //错误点3: 目标不一定是从第一行~第n行都占着
阅读全文
摘要:有三个人,最初在位置1,2,3 给n个请求,每次要派出一个人到指定的位置去 并且有一定的花费,求花费最小值 如果我们记录三个人的位置的话,会发现: 当前一定有一个人在指定位置,一定会有一个人在上一个指定的位置 又由于我们不关心具体哪一个人在哪一个位置 因此我们只需要记录不在指定位置的两个人就可以描述
阅读全文
摘要:给定序列A 构造序列非严格单调的B 使最小 搜索->dp 关键在引理: b中的数一定在a中都出现过 所以可以离散化考虑 只考虑出现过的数 #include <iostream> #include <cstdio> #include <cstring> #include
阅读全文
摘要:如果状态之间能够相互推出 注意排除冗余状态 //main:: f[0][1][1]=a[1][1]; for(int i=1;i<=(n+m-2);i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) if(i+2-j>0&&i+2-k>0) { int
阅读全文
摘要:我的想法: f[i][j]表示以i结尾的a与j结尾的b的最长公共子序列 状态转移方程 时间复杂度: 我们要分析最长上升子序列,就必须分析最后一位,因此状态里要包含最后一位. 但是注意到这道题的特殊条件 a[i]和b[j
阅读全文
摘要:照相过程中 给定每排的人数 要求后面比前面高 左边比右边高 后面一排比前边一排人多 求解总的方案数 f[0][0][0][0][0]=1; for(int i=1;i<=a[1];i++) for(int j=0;j<=min(i,a[2]);j++) for(int k=0;k<=min(j,a[
阅读全文