Problem Description
某条街上每隔一公里就有一汽车站,乘车费用如下表:
公里数 1 2 3 4 5 6 7 8 9 10
费用 12 21 31 40 49 58 69 79 90 101
而一辆车从不行驶超过10公里。某人想行驶n公里,假设他可以任意次换车,请你帮他找到一种乘车方案使费用最小(10公里的费用比1公里小的情况是允许的)。
公里数 1 2 3 4 5 6 7 8 9 10
费用 12 21 31 40 49 58 69 79 90 101
而一辆车从不行驶超过10公里。某人想行驶n公里,假设他可以任意次换车,请你帮他找到一种乘车方案使费用最小(10公里的费用比1公里小的情况是允许的)。
Input
输入有多组数据,每组数据共两行,第1行为10个不超过100的整数,依次表示行驶1-10公里的费用,第2行为某人想要行驶的公里数。
Output
对于每组数据输出行驶的最小费用。
Sample Input
12 21 31 40 49 58 69 79 90 101 15
Sample Output
147
//关键字: 完全背包
//标程:
#include<stdio.h> #include<string.h> int a[15],dp[10000]; int main() { //freopen("a.txt","r",stdin); while(scanf("%d",&a[1])!=EOF) { int i,j,n; for(i=2;i<=10;i++) scanf("%d",&a[i]); scanf("%d",&n); memset(dp,127,sizeof(dp)); dp[0]=0; for(i=1;i<=10;i++) { for(j=i;j<=n;j++) if(dp[j]>dp[j-i]+a[i]) dp[j]=dp[j-i]+a[i]; } printf("%d\n",dp[n]); } return 0; }