最小乘車費用(dp水題)
阿新 • • 發佈:2018-12-11
描述
某條街上每一公里就有一汽車站,乘車費用如下表:
公里數 1 2 3 4 5 6 7 8 9 10 費用 12 21 31 40 49 58 69 79 90 101
而一輛汽車從不行駛超過10公里。某人想行駛n公里,假設他可以任意次換車,請你幫他找到一種乘車方案使費用最小(10公里的費用比1公里小的情況是允許的)。
編一程式算出最小的價格;
輸入
輸入檔案共兩行,第一行為10個不超過200的整數,依次表示行駛1~10公里的費用,相鄰兩數間用空格隔開; 第二行為某人想要行駛的公里數n(n<=1000)。
輸出
輸出檔案僅一行包含一個整數,表示該測試點的最小費用。
輸入樣例 1
12 21 31 40 49 58 69 79 90 101 15
輸出樣例 1
147
#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<algorithm> using namespace std; int f[25],dp[205]; int n; int main() { memset(dp,127,sizeof(dp)); for(int i=1; i<=10; i++) cin>>f[i]; cin>>n; dp[0]=0; dp[1]=f[1]; for (int i=2; i<=n; i++) { dp[i]=dp[i-1]+f[1]; for (int j=1; j<=10 && j<=i; j++) dp[i]=min(dp[i],dp[i-j]+f[j]); //cout<<dp[i]<<" "; } cout<<dp[n]<<endl; return 0; }
在dp問題中外層迴圈為狀態的個數,內層迴圈為可選的方案數。
注意:
如果換了,結果會變成150