作业帮 > 综合 > 作业

经典动态规划 pascal

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/07/05 14:24:14
经典动态规划 pascal
From Admin
描述 Description
有n种硬币,面值为别为a[1],a[2],a[3]……a[n],每种都有无限多.给定非负整数s,可以选取多少个硬币使得面值和恰好为s?输出硬币数目最小值和最大值
输入格式 Input Format
第1行n
第2行s
第3到n+2行为n种不同的面值
输出格式 Output Format
第1行为最小值
第2行为最大值
样例输入 Sample Input
3
6
1
2
3
样例输出 Sample Output
2
6
时间限制 Time Limitation
1S
注释 Hint
1
经典动态规划 pascal
我来讲一下我的思路:
分两次做:
1、
f1[i]表示取到面值之和为i的最少需要几个银币
当然 f1[a[1]]=1 f1[a[2]]=1 …… f1[a[n]]=1
for i:=1 to s do
for j:=1 to n do
if i-a[j]>0 then
if f1[i]0 then f1[i]:=min(f1[i],f1[i-a[i]]+1)
else f1[i]:=f1[i-a[i]]+1;
2、同理最多也是一样