5、动态规划
..
Estrellas_
I am the king of the world.
展开
-
完全背包【动态规划】
注意区分与01背包的不同,v的遍历为正向遍历。for(int i=1;i<=n;i++){ for(int v=w[i];v<=V;v++) { dp[v]=max(dp[v],dp[v-w[i]]+c[i]); } }原创 2020-02-01 16:03:15 · 224 阅读 · 0 评论 -
01背包【动态规划】
1、二维数组解法dp[i][j] : 表示前i件物品放入一个容量为j的背包,可以获得的最大价值。// 初始化dp[0][],dp[][0]为0 for(int i=1;i<=n;i++){ for(int j=1;j<=V;j++) { if(j<w[i]) { dp[i][j]=dp[i-1][j]; } else { ...原创 2020-02-01 15:19:43 · 248 阅读 · 0 评论 -
DAG最长路【动态规划】
1、求解最长路径长度const int maxn=100010;int dp[maxn];memset(dp,0,sizeof(dp));int DP(int i) { if(dp[i]>0) return dp[i]; for(int j=0;j<n;j++) { if(G[i][j]!=inf) { int temp=G[i][j]+DP(...原创 2020-01-31 14:58:01 · 555 阅读 · 0 评论 -
最长回文子串
注意:1、dp[i][j] = 1 :表示 i~j 的子串是回文串。2、从边界出发计算。边界长度为1,长度为2的子串。3、双层遍历:①、遍历长度;②、遍历左端点位置。#include<cstdio> #include<cstring>const int maxn=1010;char S[maxn];int dp[maxn][max...原创 2020-01-29 18:54:14 · 172 阅读 · 0 评论 -
最长公共子序列
dp[i][j] 数组:记录字符串A的i号位,以及字符串B的j号位之前(包含)的最长公共子序列的长度。从边界出发,双重循环,逐个计算。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const ...原创 2020-01-29 16:22:45 · 170 阅读 · 0 评论 -
最长不下降子序列
用dp【i】数组记录以A【i】结尾的最长不下降子序列的长度。即将每个子问题的结果记录下来。#include<cstdio> #include<algorithm>using namespace std;const int maxn=100;int A[maxn]; //A[i]:第i个位置的元素 int dp[maxn]; //dp[i]:以...原创 2020-01-29 15:24:48 · 275 阅读 · 0 评论 -
最长子序列
1、动态规划解法两个关键:①、无后效性的状态;②、状态转移方程#include<cstdio> #include<algorithm>using namespace std;const int maxn=10010;int A[maxn];int dp[maxn];int main(){ int n; scanf("%d",&am...原创 2020-01-28 22:27:50 · 231 阅读 · 0 评论 -
动态规划
1、动态规划的递归写法求解斐波那契数列。//记忆化搜索int dp[maxn];int F(int n){ if(n==0||n==1) return 1; if(dp[n]!=-1) return dp[n]; else { dp[n]=F(n-1)+F(n-2); return dp[n]; }}2、动态规划的递推写法数塔问题。自下...原创 2020-01-28 22:24:22 · 236 阅读 · 0 评论