线性DP
hesorchen
这个作者很懒,什么都没留下…
展开
-
POJ2397DP搜索
题目Spiderman蜘蛛侠刚开始在高度为0的位置,每次可以向上或者向下aia_iai个距离,最后要回到高度为0的位置、中途高度不能低于0、最大高度最小。求跳跃的具体方式。解题思路先用DP求出最小最大高度,然后DFS求解路径。代码#include <set>#include <map>#include <list>#include <stack>#include <queue>#include <cmath>#原创 2021-10-19 10:57:23 · 92 阅读 · 0 评论 -
uva1379思维DP
题目题面解题思路可以证明最多用五个人对抗一个球队。AC代码#include <bits/stdc++.h>using namespace std;const int N = 105, M = 35, G = 215;struct node{ int v, id; bool operator<(const node &temp) const { return v > temp.v; }};vector&l原创 2021-05-21 20:23:10 · 221 阅读 · 1 评论 -
uva10271选筷子DP
题目有nnn根长度不相同的筷子,现在有KKK个人需要使用筷子,每个人需要三根筷子,一个人的贡献为短的两根筷子的差值的平方,即(A−B)2(A-B)^2(A−B)2。求KKK个人选完筷子的最小贡献和。解题思路如果每个人只选择两根筷子的话,题目就简单了不少。因为肯定会选择连续的两根筷子,也就是nnn个排好序的数,选出kkk对数贡献最小。那么就有令DP[i][1/0][j]DP[i][1/0][j]DP[i][1/0][j]为第iii个数,选、不选时,总共有kkk对数的最小贡献。则有状态转移方程://原创 2021-05-20 21:07:37 · 225 阅读 · 1 评论 -
hdu4939思维DP
题目Stupid Tower Defense在坐标轴[1,n][1,n][1,n]上,每两个相邻的整数点之间可以放置一座防御塔。防御塔111:在当前线段上的敌人每单位时间受到xxx伤害。例如在[1,2)[1,2)[1,2)上放置一座防御塔111,怪物在[1,2)[1,2)[1,2)上行走会受到xxx伤害。防御塔222:在当前线段后的敌人每单位时间受到yyy伤害。例如在[1,2)[1,2)[1,2)上放置一座防御塔222,怪物在[2,n)[2,n)[2,n)上行走会受到yyy伤害。防御塔原创 2021-05-19 10:55:07 · 168 阅读 · 2 评论 -
uva662DP+回溯
前言少输出个字母s,好不容易看出来了,然后提交的时候又没注释文件读写,对拍的时候又造错数据,AC代码数组越界了,debug半天才发现原来写的就是对的。题目有n(<=200)个餐厅位于x轴上。有m(<=30)个供应商,每个供应商可以选择x轴上的一个位置,为任意k个餐厅提供供应。一个供应商的花费为他到所有他供应的餐厅的距离之和。问每个餐厅都要有一家供应商提供供应,所有供应商的最小花费和是多少。所有餐厅和供应商都在整数点上。解题思路dp[i][j]dp[i][j]dp[i][j]表示前i原创 2021-04-30 11:13:33 · 140 阅读 · 0 评论 -
uva10269_SPFA思想+DP转移
题目题目大意:有n个村庄和m个城堡,编号从1到n+m,给出一个有权图,没有自环和重边。马里奥走一个单位距离需要一个单位时间。起点为城堡n+m,终点为乡村1。马里奥可以瞬移K次,每次瞬移不超过距离L,且起点和终点必须为村庄或城堡、到达一个城堡时必须结束当前瞬移。求到达村庄1的最小花费时间。详见uva10269解题思路DP[i][j][k]DP[i][j][k]DP[i][j][k]表示到达城市iii,还剩jjj次瞬移机会,上次瞬移机会还剩下kkk单位距离可以使用。分类讨论,状态过多,具体看代码注释。原创 2021-04-28 15:49:23 · 158 阅读 · 0 评论 -
uva1291简单DP
题目详见题目uva1291解题思路就题面略长,枚举所有状态,DP暴力转移即可。代码#include <bits/stdc++.h>using namespace std;int dp[1000010][6][6]; //dp[i][j][k] 前i个动作,左脚在j上, 右脚在k上的最小花费int a[1000010];int f(int x, int y) //计算花费{ if (x == y) return 1; if (x == 0)原创 2021-04-27 21:16:30 · 152 阅读 · 0 评论 -
uva10759动态规划+重载运算符
题目问,扔n次骰子,总点数在x次以上的概率是多少,n ≤ 24 、0 ≤ x < 150。解题思路用小数表示这题就很简单。换成用分数形式表示,只需要手写一下分数运算符即可。代码#include <bits/stdc++.h>using namespace std;struct node{ long long a, b; node operator*(const int &temp) const//乘法等价于乘分子 { nod原创 2021-04-20 20:23:32 · 117 阅读 · 0 评论