dp动态规划
动态规划的题
深巷wls
平平无奇
展开
-
P1799 数列(dp)C/C++
P1799 数列题目描述虽然 msh 长大了,但她还是很喜欢找点游戏自娱自乐。有一天,她在纸上写了一串数字:1,1,2,5,4。接着她擦掉了一个 1,结果发现剩下 1,2,4都在自己所在的位置上,即 1 在第 1 位,2 在第 2 位,4 在第 4 位。她希望擦掉某些数后,剩下的数列中在自己位置上的数尽量多。她发现这个游戏很好玩,于是开始乐此不疲地玩起来……不过她不能确定最多能有多少个数在自己的位置上,所以找到你,请你帮忙计算一下!输入格式第一行为一个数 n,表示数列的长度。接下来一行为 n个用空原创 2022-04-13 17:03:37 · 296 阅读 · 0 评论 -
试题 D: 本质上升序列(C/C++)
题目描述:小蓝特别喜欢单调递增的事物。在一个字符串中,如果取出若干个字符,将这些字符按照在字符串中的顺序排列后是单调递增的,则成为这个字符串中的一个单调递增子序列。例如,在字符串 lanqiao 中,如果取出字符 n 和 q,则 nq 组成一个单调递增子序列。类似的单调递增子序列还有 lnq、i、ano 等等。小蓝发现,有些子序列虽然位置不同,但是字符序列是一样的,例如取第二个字符和最后一个字符可以取到 ao,取最后两个字符也可以取到 ao。小蓝认为他们并没有本质不同。对于一个字符串,小蓝想知道原创 2022-03-26 15:19:40 · 303 阅读 · 1 评论 -
多重背包(DP)C/C++
#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu unsigned long longusing namespace std;int value[50010];int main(){.原创 2022-02-09 17:30:03 · 110 阅读 · 0 评论 -
完全背包(dp)C/C++
#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu unsigned long longusing namespace std;int value[50010];int main(){..原创 2022-02-08 20:45:07 · 86 阅读 · 0 评论 -
背包问题(dp)C/C++
dp直接做:#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu unsigned long longusing namespace std;int value[10010];int ma.原创 2022-02-08 20:18:30 · 420 阅读 · 0 评论 -
矩阵取数问题(dp)C/C++
直接用dp,代码如下:#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu unsigned long longusing namespace std;int a[510][510],ans.原创 2022-02-08 19:47:52 · 663 阅读 · 0 评论 -
数字三角形(递归/递推)C/C++
递归解法分析:这是一道经典的动态规划问题,我们还是从最浅显的算法出发,由浅到深慢慢研究。首先最容易想到的是暴力搜索算法。我们先用一个二维数组map来存放上面的数字三角形,于是有:map[1][1]=7map[2][1]=3 map[2][2]=8map[3][1]=8 map[3][2]=1 map[3][3]=0……然后我们假设,这里有一个名为dfs(x,y)的函数,该函数能从上述三角形中位置为(x,y)处出发,往其下自动寻找最大路径和,并返回这个和。那么对于题目输入的任何数字三角形,我们.原创 2022-02-08 18:47:51 · 2198 阅读 · 0 评论 -
最长回文子串(C/C++动态规划)
题目描述输入一个字符串Str,输出Str里最长回文子串的长度。回文串:指aba、abba、cccbccc、aaaa这种左右对称的字符串。串的子串:一个串的子串指此(字符)串中连续的一部分字符构成的子(字符)串例如 abc 这个串的子串:空串、a、b、c、ab、bc、abcInput输入Str(Str的长度 <= 1000)Output输出最长回文子串的长度L。Sample InputdaabaacSample Output5令dp[i][j]表示S[i]至S[j]所表示的子串原创 2022-01-08 19:44:55 · 3125 阅读 · 0 评论 -
P1115 最大子段和(DP,贪心,暴力)C/C++
P1115 最大子段和思路一:直接暴力,3个测试点超时,40分#include<iostream>#include<cstdio>#include<queue> #include<algorithm>#include<vector>using namespace std;#define ull unsigned long longint main(){ int n,a[200010]; cin >> n ;原创 2021-12-05 11:08:41 · 733 阅读 · 0 评论 -
P1049 [NOIP2001 普及组] 装箱问题(dp)C/C++
P1049 [NOIP2001 普及组] 装箱问题因为每个物体,都有装与不装两种选择,所以我们得到状态转移方程:f[j]=max(f[j],f[j-w[i]]+w[i]);f[j] 为:当总容量为 j 时,不放第 i 件物品,所能装的最大体积。f[j-w[i]]+w[i] 为:当总容量为 j 时,放了第 i 件物品后,所能装的最大体积。(即 j减去第 i 件物品体积 的容量能装的最大体积+第 i 件物品的体积。w[i] 为第 i 件物品体积)#include<iostream>#i原创 2021-12-01 22:13:12 · 1515 阅读 · 1 评论 -
P1164 小A点菜(dp,dfs)C/C++
P1164 小A点菜正解在最下面DFS解法,超时思路:每种菜只有选和不选两种,用dfs暴力一遍,结果超时了#include<bits/stdc++.h>using namespace std;int a[10010],s=0,n,m;void dfs(int step,int money){ if(money==0){ s++; return ; } if(step==n+1)return ;//已经是最后一个菜 if(money>=a[step]原创 2021-12-01 16:05:04 · 834 阅读 · 0 评论 -
P1521 求逆序对(动态规划dp)C/C++
思路:当插入第i个数字时,例如插入第4个数字,当插入在最后一个位置,即xxxi那么此时这串数列的逆序对方案数就是前i-1的方案数,因为在末尾,和任何一个数都不构成逆序对,即f[i-][j] ;当插入的位置为xxix时,i和后面的一个数字构成了一个逆序对,那么前面i-1个数字必然要有j-1个逆序对才行,即f[i-1][j-1]接下来便是:f[i-1][j-2],f[i-1][j-3],f[i-1][j-4]…到ixxx,即循环到第i-1次的时候,方案数是f[i-1][j-i-1]可以得到:f..原创 2021-11-25 23:06:52 · 681 阅读 · 0 评论 -
P2769 猴子上树(动态规划dp)C/C++
P2769 猴子上树程序循环里主要的部分是枚举树 而不是猴子 !用f[i][j]来表示前 i 只猴子上了前 j 课树#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const long long maxn = 5005 ;long long n,mon[maxn],原创 2021-11-27 22:58:26 · 579 阅读 · 0 评论