RQNOJ 169 最小乘車費用:水dp
阿新 • • 發佈:2017-09-01
oid rri ble bound other size family ring href
題目鏈接:https://www.rqnoj.cn/problem/169
題意:
給出行駛1~10公裏的費用(所有車一樣),可以倒車,問行駛n公裏的最小費用。
題解:
大水題。。。 (=′ω`=)
表示狀態:
dp[i] = min cost
i:行駛了i公裏
找出答案:
ans = dp[n]
如何轉移:
now: dp[i]
dp[i+j] = min dp[i] + c[j]
枚舉倒車行駛j公裏
邊界條件:
dp[0] = 0
others = -1
AC Code:
1 // state expression:2 // dp[i] = min cost 3 // i: drove i km 4 // 5 // find the answer: 6 // ans = dp[n] 7 // 8 // transferring: 9 // now: dp[i] 10 // dp[i+j] = min dp[i] + c[j] 11 // 12 // boundary: 13 // dp[0] = 0 14 // others = -1 15 #include <iostream> 16 #include <stdio.h> 17 #include <string.h> 18 #define MAX_N 105 19#define MAX_L 15 20 21 using namespace std; 22 23 int n; 24 int c[MAX_L]; 25 int dp[MAX_N]; 26 27 void read() 28 { 29 for(int i=1;i<=10;i++) 30 { 31 cin>>c[i]; 32 } 33 cin>>n; 34 } 35 36 void solve() 37 { 38 memset(dp,-1,sizeof(dp)); 39 dp[0]=0; 40 for(int i=0;i<n;i++) 41 { 42 if(dp[i]!=-1) 43 { 44 for(int j=1;j<=10;j++) 45 { 46 if(dp[i+j]==-1 || dp[i+j]>dp[i]+c[j]) 47 { 48 dp[i+j]=dp[i]+c[j]; 49 } 50 } 51 } 52 } 53 } 54 55 void print() 56 { 57 cout<<dp[n]<<endl; 58 } 59 60 int main() 61 { 62 read(); 63 solve(); 64 print(); 65 }
RQNOJ 169 最小乘車費用:水dp