DP
雨羊
学生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU-2059 龟兔赛跑
DP题。理解DP不是一种固定的算法,而是一种思路,是一种用空间换时间的思维方式。开数组记录每一步的最优解,每次比较更新,最后得出的就是整体最优解。 这题每个步骤有个决策,就是在充电站时选择充或不充,每个决策有影响后面的决策。然后就是怎样让每一步达到最优,这时就要用数组记录然后更新,用一个数组记录每一步的最优解,然后再根据决策的不同,将所有可能的情况列出得这一步的最优解,再保存,下来重复操作。这样原创 2017-07-13 17:11:53 · 378 阅读 · 0 评论 -
邮票
问题描述 给定一个信封,有N(1≤N≤100)个位置可以贴邮票,每个位置只能贴一张邮票。我们现在有M(M 显然,信封上能贴的邮资最小值是min(X1, X2, …, Xm),最大值是 N*max(X1, X2, …, Xm)。由所有贴法得到的邮资值可形成一个集合(集合中没有重复数值),要求求出这个集合中是否存在从1到某个值的连续邮资序列,输出这个序列的 最大值原创 2017-09-27 21:58:36 · 248 阅读 · 0 评论 -
背包模板
模板: /** * 多重背包: * 有N种物品和一个容量为 V的背包。第i种物品最多有 num[i]件可用, * 每件耗费的空间是C[i],价值是W[i]。 * 求解将哪些物品装入背包可使这些物品的耗费的空间总和不超过背包容量,且价值总和最大。 */ #include <iostream> #include <cstring> #include <alg...原创 2017-07-16 00:54:42 · 373 阅读 · 0 评论 -
hdu-2546 饭卡
题目链接:hdu-2546 思路:DP[i][j]存的是j价格买i个物品最贵的价格,然后把二维变一维,第二层循环从后向前,依次覆盖上一层的dp #include #include #include using namespace std; int dp[1005];//dp存的J价格在0~i物品中可以购买到的最大价格 int main() { int money,i,j,k,m,n,s[1原创 2017-07-15 14:01:01 · 231 阅读 · 0 评论 -
hdu-2151 Worm
题目链接:hdu-2151 思路:dp[i][j]表示i分钟时到达j树的方案数,此方案数等于上一层相邻的两个的方案数综合,dp公式 dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1]; #include using namespace std; int main() { int dp[105][105], i, j, k, l, m, n,p,t;/原创 2017-07-15 01:54:55 · 380 阅读 · 0 评论 -
hdu-1087 Super Jumping! Jumping! Jumping!
题目链接:hdu-1087 题意:从起点到终点,走的值必须必前面走的值大,求到终点的时候走过的路上数字的最大和 思路:dp[i]存到当前点切以当前点为最后一步的最优解,1~n之间肯定有一个点是最后一个点,或者直接到终点,则依次把1~n当做最后一个点,求出最优解就行,最优解即为dp[i]中最大的数,这是第一层循环,第二层循环就是1~i;把j当做i项前面的最后一项,求出最优的dp[i],从n个dp原创 2017-07-15 01:33:40 · 264 阅读 · 0 评论 -
hdu-1466 计算直线的交点数
题目链接:hdu-1466 每次有平行线的时候,不互相平行的线(n-i)条和每条平行线都有n-i个交点, 一共(n-i)*i个交点,加上n-i条线本身的交点,就是总的交点数。 如果平行线的条数固定,n变化,n-i也就是不平行的线变化。 对于任意的n(n为正整数)条直线 有以下情况: 1条平行(全不平行)时,(n-1)条线的所有情况+(n-1)原创 2017-07-15 01:26:39 · 337 阅读 · 0 评论 -
hdu- 1058 Humble Numbers
题目链接:hdu-1058 思路:可四个循环暴力,此处说下dp;让每个数都乘以2,3,5,7; 四个指针,分别指向已经乘过2,3,5,7的数的下一个,然后让这四个数分别乘以2,3,5,7取最小值,注意11,12,13的英文字母结尾都是th #include #include using namespace std; int num[5845]; int min(int原创 2017-07-14 22:28:13 · 208 阅读 · 0 评论 -
hdu-1176 免费馅饼
题目链接:hdu-1176 思路:纵坐标表示时间,横坐标表示第几个坐标处,dp[i][j]表示i时间时,j坐标处的最大馅饼数,从最大时间向前推,dp[i][j]等于上边一行中相连接中的三个中的最大值,加上此处的馅饼数; #include #include #include using namespace std; int s[15][100000],dp[100000][15];//dp[i]原创 2017-07-14 21:56:36 · 326 阅读 · 0 评论 -
hdu-1160 FatMouse's Speed
题目链接:hdu-1160 题目大意:输入几组老鼠的体重还有速度,从其中取n组,使这n组满足随着质量增大速度减小,求最大的n,并输出它们的序号 思路:先按质量从小到大,速度从大到小排列,dp[i]代表前i个数据中最大的n;两个循环,第一个求dp[i],第二个从1到i,如果j与i符合要求,则dp[i]=dp[j]+1;第二层循环循环一遍的,循环到i,求出的最大的dp[i],即为需要记录的dp[i原创 2017-07-14 21:22:14 · 213 阅读 · 0 评论 -
hdu-1159 Common Subsequence
题目链接:hdu-1159题目大意:给出两个字符串,求最长公共子序列,不一定是连续的,顺序一样便可,经典的lcs问题;思路:二维dp,dp[i][j]代表s1中取i个字符,s2中取j个字符时,两者的最长公共子序列长度,当最后一个字符相等时,s1[i]=s2[j]时,dp[i][j]=dp[i-1][[j-1]+1;最后一个字符不等时,取s1去掉一个字符或者s2去掉一个字符的最大的dp,即dp[i]...原创 2017-07-14 21:08:16 · 238 阅读 · 0 评论 -
hdu-1421 搬寝室
题目链接:hdu-1421 dp[i][j]表示从前j个中取i对,排序后,肯定两两相邻的平方差和最小,若取i,则肯定i与i-1一对,若不选,则取前面值,两者中取最小值,dp[i][j] = min(dp[i][j - 1], dp[i - 1][j - 2] + (s[j] - s[j - 1])*(s[j] - s[j - 1])); #include #include #include u原创 2017-07-14 20:09:32 · 245 阅读 · 0 评论 -
hud-1503 Advanced Fruits
题目链接:hdu-1503 题目大意:给你两个单词,将两个单词拼在一起,使新单词包括两个单词,并且是最短的 思路:把属于最长公共子序列的元素输出一遍,别的按原序输出便可,先打出最长公共子序列长度的dp表,开始回溯,最后一个字母相等的时候,说明是最长公共子序列的元素,向斜上方走, 当最后两个字符不相等的时候,说明不属于最长公共子序列元素,向左边或者上边中的最大值走,知道dp==0为直,再把没走过原创 2017-07-14 19:58:27 · 324 阅读 · 0 评论 -
LIS(最长上升子序列)
方法一: dp动态规划 状态设计:dp[i]代表以a[i]结尾的LIS的长度 状态转移:dp[i]=max(dp[i], dp[j]+1) (0<=j< i, a[j]< a[i]) 时间复杂度:O(N^2) 例题:https://blog.youkuaiyun.com/y201619819/article/details/78354348 方法二:贪心+二分 时间复杂...原创 2019-01-31 19:30:31 · 474 阅读 · 0 评论
分享