
动态规划
动态规划
moyangxian
MoYang
展开
-
HDU 4489 The King’s Ups and Downs(dp)
题目链接题记:首先,我们假设现在已经放了i-1个人了,现在需要放第i个人,(我们放的时候按照从矮到高放),由于第i个人是当前最高的,所以他无论放在哪里都是波峰。只要第i个人是波峰,那么他左边一定要是10,右边要是01(1代表高,0代表矮)。这样才能形成10101这样的波浪状(第i个人必定是1)。所以我们需要知道在某个位置之前为10的数量n,在第i个人之后为01的数量m。那么在这个位置的方...原创 2020-04-28 16:45:26 · 124 阅读 · 0 评论 -
HDU 2182 Frog(dp)
题目链接解法1:BFS。需要一点剪枝,用一个vis[i][j](表示位置走到下标为i的点用了j步)数组存下当前状态的最大值,只有大于这个值才入列。#include<iostream>#include<queue>#include<algorithm>#include<cstring>using namespace std;const i...原创 2020-04-28 14:46:03 · 251 阅读 · 0 评论 -
HDU-2044 一只小蜜蜂...(递推)
题目链接题记:简单递推,需要注意数组要开long long。#include<iostream>#include<cstring>#include<cstdio>using namespace std;typedef long long ll;const int N=50;ll f[N+10];void solve(){ f[1]=1;...原创 2020-04-28 09:57:23 · 155 阅读 · 0 评论 -
HDU-2041超级楼梯(dp)
题目链接题记:每一级楼梯都是由i-1级和i-2级走过来的,所以直接算即可。#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int N=50;int f[N];void solve(){ f[1]=1; for(int i=2;...原创 2020-04-28 09:32:47 · 136 阅读 · 0 评论 -
HDU-2069 Coin Change(dp)
题目链接题记:f[i][j]用于表示用j个硬币实现金额为i的情况数量。注意硬币不能超过100个。#include<iostream>#include<cstring>using namespace std;const int N=101,M=251;int coins[]={1,5,10,25,50};int f[M][N];//用j个硬币实现金额iint ...原创 2020-04-28 09:23:43 · 124 阅读 · 0 评论 -
整数划分(计数类dp)
题目链接一个正整数n可以表示成若干个正整数之和,形如:n=n1+n2+…+nk,其中n1≥n2≥…≥nk,k≥1。我们将这样的一种表示称为正整数n的一种划分。现在给定一个正整数n,请你求出n共有多少种不同的划分方法。输入格式共一行,包含一个整数n。输出格式共一行,包含一个整数,表示总划分数量。由于答案可能很大,输出结果请对109+7取模。数据范围1≤n≤1000输入样例:5...原创 2020-04-27 20:45:46 · 198 阅读 · 0 评论 -
石子合并(区间dp)
题目链接设有N堆石子排成一排,其编号为1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有4堆石子分别为 1 3 5 2, 我们可以先合并1、2堆,代价为4,得到4 5 2, 又合并 1,2堆,...原创 2020-04-27 16:43:32 · 248 阅读 · 0 评论 -
编辑距离
题目链接给定n个长度不超过10的字符串以及m次询问,每次询问给出一个字符串和一个操作次数上限。对于每次询问,请你求出给定的n个字符串中有多少个字符串可以在上限操作次数内经过操作变成询问给出的字符串。每个对字符串进行的单个字符的插入、删除或替换算作一次操作。输入格式第一行包含两个整数n和m。接下来n行,每行包含一个字符串,表示给定的字符串。再接下来m行,每行包含一个字符串和一个整数,表...原创 2020-04-07 20:56:49 · 89 阅读 · 0 评论 -
最短编辑距离
题目链接给定两个字符串A和B,现在要将A经过若干操作变为B,可进行的操作有:删除–将字符串A中的某个字符删除。插入–在字符串A的某个位置插入某个字符。替换–将字符串A中的某个字符替换为另一个字符。现在请你求出,将A变为B至少需要进行多少次操作。输入格式第一行包含整数n,表示字符串A的长度。第二行包含一个长度为n的字符串A。第三行包含整数m,表示字符串B的长度。第四行包含一个长度...原创 2020-04-07 20:27:01 · 132 阅读 · 0 评论 -
最长公共子序列
题目链接给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。输入格式第一行包含两个整数N和M。第二行包含一个长度为N的字符串,表示字符串A。第三行包含一个长度为M的字符串,表示字符串B。字符串均由小写字母构成。输出格式输出一个整数,表示最大长度。数据范围1≤N≤1000,输入样例:4 5acbdabedc输出样例:3#in...原创 2020-04-07 20:00:26 · 143 阅读 · 0 评论 -
最长上升子序列
最长上升子序列给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤100000,−109≤数列中的数≤109输入样例:73 1 2 1 8 5 6输出样例:4纯dp做法O(n2)#include<iostream>using ...原创 2020-04-04 21:58:44 · 86 阅读 · 0 评论 -
数字三角形
数字三角形给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 88 1 02 7 4 44 5 2 6 5输入格式第一行包含整数n,表示数字三角形的层数。接下来n行,每行包含若干整数,其中第 i 行表示数字三角形...原创 2020-04-04 19:28:17 · 267 阅读 · 0 评论 -
分组背包问题
分组背包问题有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有一个整数 S...原创 2020-04-04 15:30:01 · 80 阅读 · 0 评论 -
多重背包问题
多重背包问题有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格...原创 2020-04-04 15:28:56 · 165 阅读 · 0 评论 -
完全背包问题
完全背包问题有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输出格式输...原创 2020-04-04 14:24:53 · 127 阅读 · 0 评论 -
01背包
01背包问题有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出...原创 2020-04-04 13:42:26 · 85 阅读 · 0 评论 -
HDU 1159 Common Subsequence
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159题记:最简单的最长公共子序列问题,用dp解决即可。#include<bits/stdc++.h>using namespace std;const int N=1e6+10;int dp[1005][1005];string s1,s2;int LCS(){ m...原创 2020-03-21 18:25:28 · 116 阅读 · 0 评论 -
HDU 1024 Max Sum Plus Plus
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1024#include<bits/stdc++.h>using namespace std;const int N=1e6+10;int dp1[N],dp2[N],a[N];const int INF=0x3f3f3f3f;int main(){ int n,m; ...原创 2020-03-21 17:47:57 · 95 阅读 · 0 评论