动态规划
文章平均质量分 56
ComBoat
俺好菜呀o(╥﹏╥)o
展开
-
多重背包
一共m个物品,背包最大体积为t。每个物品有对应着体积和价值,每个物品能使用一定次,求背包中最大的价值f[i][j]表示使用前i个物品,最大体积为j的情况下,所装的最大值。与01背包不同的是,一个物品可以使用一定的次数。总体思路与01背包相同,加一个循环,第k个第i物品要不要使用(也可以这么理解,k第i个物品,重新编号,相当于是第i个物品,第i+1个物品,第i+2个物品…第i+k-1个物品。所有物品重新编号,就又是01背包问题)#include<bits/stdc++.h>using na原创 2021-02-24 12:01:26 · 73 阅读 · 0 评论 -
完全背包
一共m个物品,背包最大体积为t。每个物品有对应着体积和价值,每个物品可以无限使用,求背包中最大的价值f[i][j]表示使用前i个物品,最大体积为j的情况下,所装的最大值。可以选择装第i个物品和不装第i个物品,取二者的最大值。不装第i个,那么就是使用前i-1个物品体积不超过j的最大价值;装第i个物品,就是使用前i-1个物品体积不超过j减去第k个i个物品的体积的最大价值再加上k个第i个物品的价值。f[i][j]等于 f[i-1][j-kw[i]+kv[i]的最大值 0<=k<=j/w[i]原创 2021-02-24 11:53:49 · 71 阅读 · 0 评论 -
01背包
一共m个物品,背包最大体积为t。每个物品有对应着体积和价值,每个物品只能使用一次,求背包中最大的价值f[i][j]表示使用前i个物品,最大体积为j的情况下,所装的最大值。可以选择装第i个物品和不装第i个物品,取二者的最大值。不装第i个,那么就是使用前i-1个物品体积不超过j的最大价值;装第i个物品,就是使用前i-1个物品体积不超过j减去第i个物品的体积的最大价值再加上第i个物品的价值。转移方程 f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i])观察到,第i-1行,至原创 2021-02-24 11:34:42 · 75 阅读 · 0 评论 -
OpenJudge 6047 分蛋糕(dp)
描述有一块矩形大蛋糕,长和宽分别是整数w 、h。现要将其切成m块小蛋糕,每个小蛋糕都必须是矩形、且长和宽均为整数。切蛋糕时,每次切一块蛋糕,将其分成两个矩形蛋糕。请计算:最后得到的m块小蛋糕中,最大的那块蛋糕的面积下限。假设w= 4, h= 4, m= 4,则下面的切法可使得其中最大蛋糕块的面积最小。假设w= 4, h= 4, m= 3,则下面的切法会使得其中最大蛋糕块的面积最小:输入共有多行,每行表示一个测试案例。每行是三个用空格分开的整数w, h, m ,其中1 ≤ w, h, m ≤ 2原创 2021-02-24 10:59:31 · 258 阅读 · 0 评论 -
OpenJudge 1757 神奇的口袋(dp)
描述有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。输入输入的第一行是正整数n (1 <= n <= 20),表示不同的物品的数目。接下来的n行,每行有一个1到40之间的正整数,分别给出a1,a2……an的值。原创 2021-02-23 21:14:35 · 196 阅读 · 0 评论 -
POJ 1088 滑雪(dp)
DescriptionMichael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一原创 2021-02-23 20:25:35 · 108 阅读 · 0 评论 -
HDU 1493 QQpet exploratory park(dp)
Problem DescriptionToday, more and more people begin to raise a QQpet. You can get a lot of pleasure from it, although it does not have a real life and it calls for huge patience to take care of it. There is a place called QQpet exploratory park in the wo原创 2021-02-23 18:07:19 · 117 阅读 · 0 评论 -
OpenJudge 7219 复杂的整数划分问题(dp)
描述将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。正整数n 的这种表示称为正整数n 的划分。输入标准的输入包含若干组测试数据。每组测试数据是一行输入数据,包括两个整数N 和 K。(0 < N <= 50, 0 < K <= N)输出对于每组测试数据,输出以下三行数据:第一行: N划分成K个正整数之和的划分数目第二行: N划分成若干个不同正整数之和的划分数目第三行:原创 2021-02-14 22:41:27 · 5908 阅读 · 0 评论 -
OpenJudge 7215 简单的整数划分问题(递归、dp)
描述将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。输入标准的输入包含若干组测试数据。每组测试数据是一个整数N(0 < N <= 50)。输出对于每组测试数据,输出N的划分数。样例输入5样例输出7思路使用递归实现。假设f(n,m)表示将n划分为多个不大于m的数当n=1,只有一种当m原创 2021-02-07 16:52:15 · 477 阅读 · 0 评论 -
POJ 1661 Help Jimmy(dp)
Description“Help Jimmy” 是在下图所示的场景上完成的游戏。场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能超过MAX米,不然就会摔死,游戏也会结束。设计一个程序,计算Jimmy到底地面时可能的最早时间。Inpu原创 2021-02-13 22:19:56 · 133 阅读 · 0 评论 -
POJ 2192 Zipper(DP)
DescriptionGiven three strings, you are to determine whether the third string can be formed by combining the characters in the first two strings. The first two strings can be mixed arbitrarily, but each must stay in its original order.For example, consid原创 2021-02-12 18:13:34 · 230 阅读 · 2 评论 -
luogu P1020 导弹拦截
题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是 ≤50000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。输入格式1行,若干个整数(个数≤100000)输出格式2行,每行一个整原创 2021-02-09 22:37:56 · 87 阅读 · 0 评论 -
最长上升子序列(优化)
思路f[i]以第i个数结尾的最长上升子序列的长度每一个上升子序列包括自己,将每一个值初始化为1,之后遍历之前的值,如果该值大于之前的值,则比较是现在的值大还是之前某个值加1大。最后答案不是为f数组的最后一个数,因为最长上升子序列不一定以最后一个数为结尾。转移方程if(w[i]>w[j])f[i]=max(f[j]+1,f[i])代码#include<iostream>#include<algorithm>#include<cstdio>using原创 2021-02-09 21:09:50 · 1154 阅读 · 2 评论 -
OpenJudge 2757 最长上升子序列
描述一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8).你的任务,就原创 2021-02-09 20:19:17 · 149 阅读 · 0 评论 -
POJ 1458 Common Subsequence(DP)
DescriptionA subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = < x1, x2, …, xm > another sequence Z = < z1, z2, …, zk > is a subsequence of X if there exists a strictly incr原创 2021-02-09 19:09:58 · 92 阅读 · 0 评论 -
POJ 1163 The Triangle(DP)
Description 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1)Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere原创 2021-02-09 17:40:49 · 120 阅读 · 0 评论 -
HDU 1559 最大子矩阵
HDU1559 最大子矩阵Problem Description给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。Input输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示给定的矩形有m行n列。接下来这个矩阵,有m行,每行有n个不大于1000的正整数。Output对于每组数据,输出一个整数,表示子矩阵的最原创 2021-02-03 17:06:03 · 144 阅读 · 0 评论 -
luoguP1115 最大子段和
luoguP1115 最大子段和题目描述给出一个长度为 nn 的序列 aa,选出其中连续且非空的一段使得这段和最大。输入格式第一行是一个整数,表示序列的长度 n。第二行有 n个整数,第 i个整数表示序列的第 i个数字 ai 。输出格式输出一行一个整数表示答案。输入样例72 -4 3 -1 2 -4 3输出样例4思路将前n项累加,若大于0,则继续。否则从0开始,因为求最大子段和,如果前面的是负数,加上后一个数会是后一个数变小代码#include<bits/stdc++.h原创 2021-02-02 19:19:00 · 123 阅读 · 0 评论 -
luoguP1719 最大加权矩形 最大子矩阵
luoguP1719 最大加权矩形思路求最大子矩阵可以转换为求最大子段和的问题。可以先看看这个[最大子段和]。(https://blog.csdn.net/m0_54621932/article/details/113572272)主要思路就是将二维数组压缩成一维,再分别求最大子段和代码#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using n原创 2021-02-02 22:47:51 · 230 阅读 · 2 评论