dp
文章平均质量分 50
掀开棺材板
这个作者很懒,什么都没留下…
展开
-
区间DP D - Dire Wolf
dp题意思路AC代码 题意 有n只狼排成一排 我们需要消灭所有的狼 每次狼都有a和 b 消灭第i只狼 需要第i只狼的a和其周围狼的b 思路 为了尽可能小 消灭有高b的狼或者从一端是最好的选择 dp[i][j]表示从i消灭到j需要的价值(先抛开a) 最先被消灭的其b就没有用了(枚举哪个先被消灭) 所以状态转移方程是 dp[i][j]=dp[i][k-1]+dp[k+1][j]+b[j+1]+b[i-1]//b是加两端的 AC代码 #include <bits/stdc++.h> #define e原创 2021-11-07 18:15:55 · 101 阅读 · 0 评论 -
DP 记忆搜索 E. Vasya and Binary String
DP题意思路AC代码 题意 有一个长度为n的01串 你可以删除连续的’0’或’1’并获得相应的ai 直到把01串删除完毕 最多可以获得多少价值 思路 记忆DP dp[l][r][len] l 表示起点 r 表示终点 len 表示长度 dp[i][r][len]就是在i到r区间内删除 接下来看来代码注释 AC代码 #include <bits/stdc++.h> #define endl "\n" #define INF 0x3f3f3f3f3f3f3f3f #define IO ios::sy原创 2021-11-07 17:41:31 · 104 阅读 · 0 评论 -
异或dp Happy Matt Friends
hdu 5119 异或 dp 状压 题意思路AC代码 题意 给n(0<n<=40)个数 和 一个k 从n个数中任取 使异或和>=k 求有多少种方案 思路 所以暴力dp 本来开40倍 可以状压开2倍 状态转移方程如下 j代表目前的数 答案 就是遍历一下 AC代码 #include <bits/stdc++.h> #define endl "\n" #define INF 0x3f3f3f3f3f3f3f3f #define IO ios::sync_with_stdio(f原创 2021-10-31 13:05:47 · 98 阅读 · 0 评论 -
D. Frog Traveler
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 bfs+dp+前驱题意思路AC代码 题意 青蛙跳进了一个深度为n的井里 不同的深度青蛙最多可以跳ai的高度(0~a[i]) 每次跳跃后要休息一下 在不同的深度休息会往下掉b[i] 要求 如果能够出到井外 求最小跳跃次数和路径 如果不能 输出-1 思路 暴力直接想到bfs 但是需要细节 不然会T AC代码 #include <bits/stdc++.h> #define endl "\n" #define INF 0x3f3f3原创 2021-10-28 11:44:20 · 338 阅读 · 0 评论 -
P4280 逆序对
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 P4280 逆序对题意思路AC代码 题意 给 一个长度为 n的数组 每个数的范围 为 1~k 其中有 -1的 表示 未知(可填从1~k的任意一个数) 求少逆序对的数量 思路 从大佬博客看来的思路 我自己就心证 证明了-1位置必须要填非严格单调递增 因为数据其实挺少的 可以稍微暴力一点 先预处理 biger[i][j]; //代表i位置上填j其前面有多少比他大的数的数目 small[i][j];//代表i位置上填j其后面有多少比他小的数的数目原创 2021-09-16 10:31:49 · 82 阅读 · 0 评论