![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 81
红红红红莉栖
小小的火光
展开
-
luoguP3694 邦邦的大合唱站队(状压DP)
P3694 邦邦的大合唱站队(状压DP) f[i]f[i]f[i]为完成状态iii的队列需要出队的最少人数. 如i=0110i=0110i=0110,则表示团队2和团队3(团队编号从1开始)已经排在一起并且两个团队都排在队伍最前面的状态 则我们可以枚举最后一个排好的队伍,则该队伍一定是排在所有已经排好的队伍的连续队列的最后那连续一段 则我们可以枚举每一个状态iii,枚举状态iii中一已排好的团队作为最后一个排好的队伍。 假设状态iii中已排好的团队的总人数为sumsumsum,设最后一个排好的团队的编号为j原创 2021-11-05 23:17:29 · 164 阅读 · 0 评论 -
动态规划02-背包问题
背包问题01背包完全背包多重背包分组背包 01背包 问题:NNN个物品,有容量为VVV的背包,第iii个物品的体积为viv_ivi,价值为wiw_iwi每个物品最多被挑选一次,如何使在不超过背包的容积的情况下选择出总价值最大的挑选情况. 用f[i][j]f[i][j]f[i][j]表示从前iii个物品中进行挑选,体积不超过jjj的所有选法中的最大价值 f[i][j]={f[i−1][j−vi]选择第i个物品f[i−1][j]不选第i个 f[i][j]=\begin{cases} f[i-1][j-v_i原创 2021-03-14 10:23:20 · 281 阅读 · 0 评论 -
动态规划01-LIS、LCS、数字三角形
LIS:最长上升子序列问题 边界处理: f[0]=0; 方法一:考虑f[i]可以推导出哪些状态 for(int i = 0; i < n; i++) i:结尾下标 for(int j = i + 1; j <= n; j++) 下一个数 if(a[j] > a[i]) f[j]=max(f[j],f[i]+1); 方法二:考虑f[i]可以由哪些状态得到 此方法较为常用 for(int i = 1; i <= n; i++) for(int j = 0;j < i;j原创 2020-11-17 21:53:28 · 164 阅读 · 0 评论