动态规划问题
来源:互联网 发布:qq假红包软件 编辑:程序博客网 时间:2024/06/17 18:57
最近在LeetCode做题,遇到一些动态规划问题,感觉前几年的学的算法以及数据结构白学了,于是转载这篇文章:动态规划问题
1、三角数塔问题
设有一个三角形的数塔,顶点为根结点,每个结点有一个整数值。从顶点出发,可以向左走或向右走,如图所示:
要求从根结点开始,请找出一条路径,使路径之和最大,只要输出路径的和。
【代码】
//
//
//
#include <stdio.h>
#include <stdlib.h>
#define MAXN 101
int n,d[MAXN][MAXN];
int a[MAXN][MAXN];
void fnRecursive(int,int);
//递推方法函数声明
int fnMemorySearch(int,int);
//记忆化搜索函数声明
int main()
{
}
void fnRecursive(int i,int j)
//递推方法实现过程
{
}
int fnMemorySearch(int i,int j)
//记忆化搜索实现过程
{
}
2、硬币问题
问题描述:有n种硬币,面值分别为V1,V2,…,Vn, 每种有无限多。给定非负整数S,可以选用多少硬币,使得面值之和恰好为S,输出硬币数目的最小值和最大值。(1<=n<=100,0<=S<=10000,1<=Vi<=S)
【代码】
//
//
//
#include <stdio.h>
#include <stdlib.h>
#define INF 100000000
#define MAXNUM 10000
#define MONEYKIND 100
int n,S;
int V[MONEYKIND];
int min[MAXNUM],max[MAXNUM];
void dp(int*,int*);
//递推方法函数声明
void print_ans(int*,int);
//输出函数声明
int main()
{