![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划题目
Lins H
这个作者很懒,什么都没留下…
展开
-
动态规划之0/1背包
#include <iostream>using namespace std;int w[20],c[100];int dp[20][100];int main(){ int m,n; cin>>m>>n; for(int i=1;i<=n;i++) cin>>w[i]>>c[i]; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(j&原创 2021-12-19 10:34:22 · 179 阅读 · 0 评论 -
动态规划之最长公共子序列(c/c++)
#include <iostream>#include <cstring>using namespace std;int f[100][100];//A的前i个字符,B的前j个字符的最长公共子序列的长度 int main(){ string a; string b; cin>>a>>b; for(int i=0;i<=a.length();i++) { for(int j=0;j<=b.length();j++) {原创 2021-12-19 10:31:05 · 469 阅读 · 0 评论 -
斐波那契数列(动态规划,递归)
1动态规划求前十个数#include <iostream>using namespace std;int fib[101];int main(){ fib[1]=fib[2]=1; for(int i=3;i<=10;i++) fib[i]=fib[i-1]+fib[i-2]; for(int i=1;i<=10;i++) cout<<fib[i]<<" "; }2递归求前十个数#include <iostream>原创 2021-12-19 09:34:08 · 250 阅读 · 0 评论 -
动态规划之坐标问题(带路障)
对于没有路障问题的路径问题对于不是第一行和第一列的坐标有 f(i)(j)=f(i-1)(j)+f(i)(j-1)对于有路障问题,比如本题中(0)(5)之后的坐标均为0我们可以列出如下等式假设有误路障用数组A表示,A[0][5]=1#include <iostream>using namespace std;int main(){ int m=4; int n=8; int f[m+1][n+1]={0}; int A[m+1][n+1]={0}; A[0][5]=A[.原创 2021-12-16 22:52:00 · 424 阅读 · 0 评论 -
动态规划之零钱问题(C++)
思考1、 如果我们用最少k枚硬币拼出所需的amount2、 那么k-1枚硬币一定拼出最少的amount-coin[k] // k={1,2,3…n}3、 所以原来的coin[1]+coin[2]+…+coin[k]=amount4、 coin[1]+coin[2]+…+coin[k-1]=amount-coin[k] // k={1,2,3…n}而此时,大问题就转化为了子问题假设 我们用num_coin(x)表示硬币拼出x的最少个数所以num_coin[x]=min(num_coin[x].原创 2021-12-12 18:52:33 · 1763 阅读 · 0 评论 -
动态规划求解路径不唯一问题
根据侯卫东老师的课上讲解,我本人对该类问题分为如下2步1确定动态转移方程2确定边界条件有点类似于递归,其实我个人感觉动态规划跟递归还是比较像的,只是递归冗余计算的太多,不过二者都是建立一个方程和边界条件对于本题而言,对于任意一个不在0行或者0列上面的点,总是满足这样一个关系step[m][n]=step[m-1][n]+step[m][n-1]注意 这里求得是多少种方法,不需要加1,因为只能向右或者向下,所以该点只有2种情况,左边右移到达该点,上方下移到达该点对于0行和0列需要特殊考虑,因为.原创 2021-12-09 17:45:05 · 512 阅读 · 0 评论