
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 · 257 阅读 · 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 · 274 阅读 · 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 · 599 阅读 · 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 · 202 阅读 · 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 · 198 阅读 · 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 · 308 阅读 · 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 · 262 阅读 · 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 · 266 阅读 · 0 评论