ssl1643-最小乘车费用【dp练习】
生活随笔
收集整理的這篇文章主要介紹了
ssl1643-最小乘车费用【dp练习】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最小乘車費用
題目
假設某條街上每一公里就有一個公共汽車站,并且乘車費用如下表:
而任意一輛汽車從不行駛超過10公里。某人想行駛n公里,假設他可以任意次換車,請你幫他找到一種乘車方案,使得總費用最小
注意:10公里的費用比1公里小的情況是允許的。
Input
輸入文件BUSSES.IN,文件共兩行,第一行為10個不超過200的整數,依次表示行駛1~10公里的費用,相鄰兩數間用一個空格隔開;第二行為某人想要行駛的公里數。
Output
輸出文件BUSSES.OUT,僅一行,包含一個整數,表示行使這么遠所需要的最小費用。
Sample Input
12 21 31 40 49 58 69 79 90 101
15
Sample Output
147
ideas of solving a problem
這道題就是要求求出在到達一定公里數的情況下求出最小花費。那我們用f[i]來表示到達i公里所用的最小花費。然后背包的動態轉移方程 f[i]=min(f[i],f[i-j]+a[j])
Code
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int f[1001],a[11],s,m; int main() {memset(f,1000000,sizeof(f));//賦值一個很大的整數for (int i=1;i<=10;i++) scanf("%d",&a[i]);//輸入scanf("%d",&m);//輸入f[0]=0;//初始預處理for (int i=1;i<=m;i++)//枚舉路程for (int j=1;j<=10;j++)//各種價格{if (i-j>=0)//判斷越界 f[i]=min(f[i],f[i-j]+a[j]);//動態轉移}printf("%d",f[m]);//get√ }總結
以上是生活随笔為你收集整理的ssl1643-最小乘车费用【dp练习】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 元旦最打动人心的祝福语
- 下一篇: 洛谷【P2758】-编辑距离