问题描述:
这是一个固定重点的最长路和最短路问题,可用动态规划问题来求解
方法一:递归
源代码
#include <iostream>
#include <string>
#include<algorithm>
using namespace std;
const int MAXN = 10000;
const int INF = 100000000;
//代表硬币总值,n代表硬币总数,V数组保存硬币各个面值, d代表从i出发到结点0的路径的最长路径长度或最短路径长度
//vis代表是否访问过该结点
int n, S, V[MAXN], d[MAXN], vis[MAXN];
int dpmax(int S) {
if (vis[S]) return d[S];
vis[S] = 1;
int &ans = d[S];
ans = -(1<<30);//(1 << 30);
for (int i = 1; i <= n; ++i) {
if (S >= V[i]) ans = max(ans, dpmax(S - V[i]) + 1);
}
return ans;
}
int dpmin(int S)
{
if (vis[S]) return