有n种硬币,面值分别为V1,V2,....,Vn,每种都有无限多。给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值。 1<=n<=100 0<=S<=10000 1<=Vi<=S
输入:硬币的种类n,各个硬币的面值V1,V2,....Vn,非负整数S
输出:输出硬币数目的最小值、最大值、最小值的方案、最大值的方案。
运行结果:
最长路和最短路的求法是类似的,下面只考虑最长路。由于终点固定,d(i)的确定含义变为 “从结点i出发到结点0的最长路径长度”。下面是求最长路的代码:
int vis[100],V[100],d[100],n;
int dp(int S)
{
int &ans = d[S];
if(ans >= 0)
return ans;
ans = 0;
for(int i = 1; i <= n; ++i)
if(S >= V[i])
ans = max(ans, dp(S-V[i]) + 1);
return ans;
}
注意到区别了么&#