【问题描述】
一个特别的单行街道在每公里处有一个汽车站。顾客根据他们乘坐汽车的公里使来付费。例如下表就是一个费用的单子。
kilometres
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
price
|
12
|
21
|
31
|
40
|
49
|
58
|
69
|
79
|
90
|
101
|
没有一辆车子行驶超过10公里,一个顾客打算行驶n公里(1<=n<=100),它可以通过无限次的换车来完成旅程。最后要求费用最少。
【输入文件】
第一行十个整数分别表示行走1到10公里的费用(<=500)。注意这些数并无实际的经济意义,即行驶10公里费用可能比行驶一公里少。
第二行一个整数n表示,旅客的总路程数。
【输出文件】
仅一个整数表示最少费用。
【输入输出样例】
输入:
12 21 31 40 49 58 69 79 90 101
15
输出:
147
分析:简单的《无限背包》就是由10公里不断的去填顾客的n公里找最少的乘车费。
【参考程序】:
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
long a[11],f[101];
long n;
int main()
{
freopen("busses.in","r",stdin);
freopen("busses.out","w",stdout);
for (int i=1;i<=10;i++) scanf("%ld",&a[i]);
scanf("%ld",&n);
for (int i=1;i<=n;i++) f[i]=0xfffffff;
f[0]=0;
for (int i=1;i<=10;i++)
for (int j=1;j<=n;j++)
if (f[j-i]+a[i]<f[j])
f[j]=f[j-i]+a[i];
printf("%ld\n",f[n]);
return 0;
}