dp
dp
AimerAimerAimer
我人很懒,什么都没写
展开
-
最短Hamilton路径(dp+位运算、状态压缩dp)
最短Hamilton路径题目提交记录讨论题解视频讲解给定一张 n 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。输入格式第一行输入整数n。接下来n行每行n个整数,其中第i行第j个整数表示点i到j的距离(记为a[i,j])。对于任意的x,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[y,z]>=a[x,z]。.原创 2020-08-18 15:33:16 · 238 阅读 · 0 评论 -
1271:【例9.15】潜水员(二维费用背包变形)
1271:【例9.15】潜水员时间限制: 1000 ms 内存限制: 65536 KB提交数: 5109 通过数: 2930【题目描述】潜水员为了潜水要使用特殊的装备。他有一个带2种气体的气缸:一个为氧气,一个为氮气。让潜水员下潜的深度需要各种的数量的氧和氮。潜水员有一定数量的气缸。每个气缸都有重量和气体容量。潜水员为了完成他的工作需要特定数量的氧和氮。他完成工作所需气缸的总重的最低限度的是多少?例如:潜水员有5个气缸。每行三个数字为:氧,氮的(升)量和气缸的重量:3 3原创 2020-07-30 11:58:37 · 1078 阅读 · 0 评论 -
1296:开餐馆
1296:开餐馆时间限制: 1000 ms 内存限制: 65536 KB提交数: 4401 通过数: 2144【题目描述】信息学院的同学小明毕业之后打算创业开餐馆.现在共有n个地点可供选择。小明打算从中选择合适的位置开设一些餐馆。这 n个地点排列在同一条直线上。我们用一个整数序列m1,m2,…mn来表示他们的相对位置。由于地段关系,开餐馆的利润会有所不同。我们用pi 表示在mi处开餐馆的利润。为了避免自己的餐馆的内部竞争,餐馆之间的距离必须大于k。请你帮助小明选择一个总利润最原创 2020-07-29 12:53:53 · 503 阅读 · 0 评论 -
1275:【例9.19】乘积最大(区间dp)
1275:【例9.19】乘积最大时间限制: 1000 ms 内存限制: 65536 KB提交数: 3868 通过数: 2568【题目描述】今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K原创 2020-07-28 17:54:02 · 652 阅读 · 0 评论 -
1274:【例9.18】合并石子(区间dp)
1274:【例9.18】合并石子时间限制: 1000 ms 内存限制: 65536 KB提交数: 5754 通过数: 3636【题目描述】在一个操场上一排地摆放着N堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。计算出将N堆石子合并成一堆的最小得分。【输入】第一行为一个正整数N (2≤N≤100);以下N行,每行一个正整数,小于10000,分别表示第i堆石子的个数(1≤i≤N)。【输出】一个正原创 2020-07-28 17:24:34 · 274 阅读 · 0 评论 -
96. 奇怪的汉诺塔
汉诺塔问题,条件如下:1、这里有A、B、C和D四座塔。2、这里有n个圆盘,n的数量是恒定的。3、每个圆盘的尺寸都不相同。4、所有的圆盘在开始时都堆叠在塔A上,且圆盘尺寸从塔顶到塔底逐渐增大。5、我们需要将所有的圆盘都从塔A转移到塔D上。6、每次可以移动一个圆盘,当塔为空塔或者塔顶圆盘尺寸大于被移动圆盘时,可将圆盘移至这座塔上。请你求出将所有圆盘从塔A移动到塔D,所需的最小移动次数是多少。河内塔.jpg汉诺塔塔参考模型输入格式没有输入输出格式对于每一个整数n(1≤n≤12),输出一个原创 2020-07-24 15:05:28 · 175 阅读 · 0 评论 -
1273:【例9.17】货币系统(一本通)
1273:【例9.17】货币系统时间限制: 1000 ms 内存限制: 65536 KB提交数: 6477 通过数: 2813【题目描述】给你一个n种面值的货币系统,求组成面值为m的货币有多少种方案。【输入】第一行为n和m。【输出】一行,方案数。【输入样例】3 10 //3种面值组成面值为10的方案1 //面值12 //面值25 //面值5【输出样例】10 //有原创 2020-05-30 20:47:58 · 809 阅读 · 1 评论 -
Greatest Common Increasing Subsequence HDU - 1423 (严格)最长公共上升子序列(LCIS)
最长公共上升子序列(LCIS)dp[i][j]代表所有a[1 ~ i]和b[1 ~ j]中以b[j]结尾的公共上升子序列的集合两个子集:1.不包含a[i]的子集,最大值是dp[i - 1][j];2.包含a[i]的子集O(nmm)#include <iostream>#include <cstdio>#include <cstring>#inc...原创 2020-05-04 14:47:55 · 156 阅读 · 0 评论 -
POJ 2250 Compromise(最长公共子序列LCS+打印序列)
ab fk ce tt ak bt < b 0 0 0 0 0 0 0ab 0 1 1 1 1 1 ...原创 2020-05-04 09:55:40 · 120 阅读 · 0 评论 -
Testing the CATCHER POJ - 1887(最长不上升子序列)
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,a[100005],dp[100005],len;int my_upper_bound(int x){ int l=0,r=l...原创 2020-05-02 19:30:48 · 137 阅读 · 0 评论 -
分组背包问题
有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有一个整数 Si,表示第 i...原创 2020-04-05 17:26:04 · 146 阅读 · 0 评论 -
二维费用的背包问题
有 N 件物品和一个容量是 V 的背包,背包能承受的最大重量是 M。每件物品只能用一次。体积是 vi,重量是 mi,价值是 wi。求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,M,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大重量。接下来有 N 行,每行三个整数 vi,mi...原创 2020-04-05 17:07:25 · 127 阅读 · 0 评论 -
混合背包
有 N 种物品和一个容量是 V 的背包。物品一共有三类:第一类物品只能用1次(01背包);第二类物品可以用无限次(完全背包);第三类物品最多只能用 si 次(多重背包);每种体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每...原创 2020-04-05 13:02:13 · 76 阅读 · 0 评论 -
多重背包二进制优化
有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整...原创 2020-04-05 12:33:17 · 256 阅读 · 0 评论 -
1088:滑雪 Openjudge(dp+dfs)
1088:滑雪查看提交统计提示提问总时间限制: 1000ms 内存限制: 65536kB描述Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子1 2 3 4 516 ...原创 2020-04-01 21:00:53 · 121 阅读 · 0 评论 -
2755:神奇的口袋 Openjudge
2755:神奇的口袋查看提交统计提示提问总时间限制: 10000ms 内存限制: 65536kB描述有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是...原创 2020-04-01 20:10:40 · 207 阅读 · 0 评论 -
Monkey and Banana HDU - 1069 最长上升子序列
A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the roof of a building, and at the mean time, provide the monkey with some blocks. If the monk...原创 2020-03-29 22:27:17 · 95 阅读 · 0 评论 -
Doing Homework HDU - 1074(dp状态压缩)
Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every teacher gives him a deadline of handing in the homework. If Ignatius hands in the homework after th...原创 2020-03-29 19:54:31 · 114 阅读 · 0 评论 -
免费馅饼 HDU - 1176(dp)
都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接。但由于小径两侧都不能站人,所以他只能在小径上接。由于gameboy平时老呆在房间里玩游戏,虽然在游戏中是个身手敏捷的高手,但在现实中运动神经特别迟钝...原创 2020-03-29 18:50:04 · 151 阅读 · 0 评论 -
P1719 最大加权矩形(洛谷)
思路:矩阵压缩,从二维变一维,求最大子序和。#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <queue>#include <string>#include <vector>#includ...原创 2020-03-24 17:14:03 · 413 阅读 · 0 评论 -
POJ 1458 Common Subsequence(LCS 最长公共子序列)
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#define ll long longusing namespace std;string s1,s2;int dp[1005][1005...原创 2020-03-18 12:02:23 · 105 阅读 · 0 评论 -
P1020 导弹拦截(洛谷)
最长不上升子序列与最长严格上升子序列(LIS)#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <string>#include <algorithm>#define inf 0x7fffffff#d...原创 2020-03-04 23:48:42 · 143 阅读 · 0 评论 -
UVA 10306 e-Coins(二维完全背包)
题意:思路:#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#define inf 0x3f3f3f3fusing namespace std;int dp[305][305],x[45...原创 2020-02-20 23:26:15 · 156 阅读 · 0 评论 -
UVA 437 The Tower of Babylon
题意:思路:#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>using namespace std;struct node{ int x,y,z; bool opera...原创 2020-02-20 22:58:06 · 142 阅读 · 0 评论 -
UVA 10739 String to Palindrome
题意:给出一个字符串,有三种操作(任意位置删除、增加、替换一个字符),问需要最少的操作次数使其变为回文串。思路:dp[i][j]表示区间 i*到 *j,将其变成回文串的最少操作次数。如果a[i]==a[j],dp[i][j]=dp[i+1][j-1],否则dp[i][j]=min(dp[i+1][j-1],min(dp[i+1][j],dp[i][j-1]))+1**增加和删除一样:(...原创 2020-02-20 22:33:17 · 214 阅读 · 1 评论 -
UVA 10635 Prince and Princess
题意:求两数字串的最长公共子序列(LCS)。思路:LCS的时间复杂度为O(nn),因为数据量大,所以会超时。又因为数字串互不相同,所以可以LCS转LIS(最长上升子序列),LIS有时间复杂度O(nlog(n))的解法。–二分法先对第一个数字串进行处理,用map记录下每个值所对应的下标(位置),再处理第二个数字串,将其中在第一个数字串中出现的数字构建一个数组,新数组的值记录的是该数字在第一...原创 2020-02-20 22:02:01 · 150 阅读 · 0 评论 -
UVA 825 Walking on the Safe Side
题意:从左上角到右下角共有几条路,只能向下和向右走。思路:dp[i][j]=dp[i-1][j]+dp[i][j-1]某点的路线数等于左边和上边之和初始化: dp[0][1]=1或dp[1][0]=1#include <iostream>#include <cstdio>#include <cstring>#include <string...原创 2020-02-20 20:03:08 · 183 阅读 · 0 评论 -
UVA 10404 Bachet's Game (完全背包)
题意:给出n(总和)和m(不同数值的石头),每种数值的石头可以任意取,在双方都想赢的前提下(博弈),问谁先达到总和n.思路:完全背包(对于同一种可以取任意个数)博弈:dp数组有{0,1}两种情况,1表示先取者获胜。状态转移方程:i-a[j]>=0&&dp[i-a[j]]==0#include <iostream>#include <cstdio...原创 2020-02-20 19:53:41 · 237 阅读 · 0 评论 -
UVA 562 Dividing coins(01背包)
题意:给出n个面值的硬币,将这堆硬币分成两组,使得两堆硬币的和之差的绝对值最小,并求得该值。思路:01背包,取n个硬币的总和**(s)的一半(av)作为背包的容量,求得该背包容量下装入的最大价值(dp[av]),再通过s-dp[av]求得x**,即另一堆所分得的硬币之和,最后**abs(x-dp[av])**求得两者的和之差。#include <iostream>#inclu...原创 2020-02-20 19:19:38 · 306 阅读 · 0 评论