
动态规划法
cvlab.yang
偶尔写写程序
展开
-
钢条切割(动态规划法)
自顶向下递归方法//自顶向下递归//钢条切割#include <iostream>#define N 1000using namespace std;int CUT_ROD(int p[],int n) //p数组为价格,n为钢条长度{ int q=-1; if(n == 0) return 0; for(int i=1;i<=n;i++) {原创 2017-07-27 16:23:13 · 1029 阅读 · 0 评论 -
斐波那契数(动态规划法)
1.递归方法//斐波那契数#include <iostream>using namespace std;int F[1000];long long FIB(int n){ if(n == 0) return 0; if(n == 1) return 1; else return FIB(n-1)+FIB(n-2);}int main(int argc, char *ar原创 2017-08-01 16:29:09 · 326 阅读 · 0 评论 -
矩阵链乘法(动态规划法)
//动态规划法//矩阵链乘法问题#include <iostream>#include <limits.h>using namespace std;int p[1000];int m[1000][1000],s[1000][1000];void SEARCH(int s[][1000],int start,int end){ if(start > end) {cout << "wro原创 2017-08-03 14:58:35 · 453 阅读 · 0 评论 -
最长公共子序列LCS(动态规划法)
//动态规划法//最长公共子序列//c数组指出子序列长度,b数组为具体路径#include <iostream>#define N 1000#define UPLEFT 1#define UP 2#define LEFT 3int c[N][N],b[N][N];using namespace std;void PRINT_LCS(int b[][N],char X[],int i,i原创 2017-07-28 10:46:10 · 481 阅读 · 0 评论 -
最少硬币(动态规划法,初级)
//动态规划法//硬币问题//如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元?//(表面上这道题可以用贪心算法,但贪心算法无法保证可以求出解,比如1元换成2元的时候)//程序中v[]为硬币面值,下标从1开始,d[i]为i状态下的最优解#include <iostream>#include <cstring>#define N 1000#define MAX 10原创 2017-07-28 20:03:08 · 685 阅读 · 0 评论 -
最长非递减子序列LIS(动态规划法,一维)
//动态规划法//LIS(时间复杂度为n平方)#include <iostream>#include <cstring>#define N 1000using namespace std;int LIS(int A[], int length){ int d[N]; for(int i=1;i<N;i++) d[i]=1; d[0]=0; for(int i=原创 2017-07-28 20:05:05 · 927 阅读 · 0 评论 -
收集苹果(动态规划法,二维)
//动态规划法//平面上有x*y个格子,每个格子中放着一定数量的苹果。//你从左上角的格子开始,每一步只能向下走或是向右走,每次走到一个格子上就把格子里的苹果收集起来,//这样下去,你最多能收集到多少个苹果。#include <iostream>#define N 100using namespace std;int MAX_APPLE(int A[][N], int x, int y)原创 2017-07-28 20:06:49 · 404 阅读 · 0 评论