洛谷10月月赛Round.1| P3399 丝绸之路 [DP]
題目背景
張騫于公元前138年曾歷盡艱險出使過西域。加強了漢朝與西域各國的友好往來。從那以后,一隊隊駱駝商隊在這漫長的商貿大道上行進,他們越過崇山峻嶺,將中國的先進技術帶向中亞、西亞和歐洲,將那里的香料、良馬傳進了我國。每當人們凝望荒涼的大漠孤煙,無不引起對往日商貿、文化繁榮的遐想……
題目描述
小倉鼠帶著貨物,從中國送到安息,絲綢之路包括起點和終點一共有N+1個城市,0號城市是起點長安,N號城市是終點巴格達。要求不超過M天內必須到達終點。一天的時間可以從一個城市到連續的下一個城市。從i-1城市到i城市距離是Di。
大家都知道,連續趕路是很辛苦的,所以小倉鼠可以在一個城市時,可以有以下選擇:
-
移動:向下一個城市進發
- 休息:呆在原來的城市不動
沙漠天氣變化無常,在天氣很不好時,前進會遇到很多困難。我們把M天的第j(1<=j<=M)天的氣候惡劣值記為Cj。從i-1城市移動到i城市在第j天進發時,需要耗費Di*Cj的疲勞度。
不過小倉鼠還是有選擇權的,可以避開比較惡劣的天氣,休息是不會消耗疲勞值的?,F在他想知道整個行程最少要消耗多少疲勞值。
輸入輸出格式
輸入格式:
?
第一行2個整數N,M
連續N行每行一個整數Dj
連續M行每行一個整數Cj
?
輸出格式:
?
一個整數,表示最小疲勞度
?
輸入輸出樣例
輸入樣例#1:3 5 10 25 15 50 30 15 40 30 輸出樣例#1:
1125
說明
本題時限1s,內存限制128M,因新評測機速度較為接近NOIP評測機速度,請注意常數問題帶來的影響。
第1天休息
第2天0->1 疲勞值 10 × 30 = 300 .
第3天1->2 疲勞值 25 × 15 = 375 .
第4天休息
第5天2->3 疲勞值 15 × 30 = 450 .
1 ≦ N ≦ M ≦ 1000
1 ≦ Di , Ci ≦ 1000
?
煞筆DP
f[i][j]到i個城市j天
愚蠢啊初始化偷懶結果f[0][0]沒初始化只拿了43分
// // main.cpp // luogu10.1 // // Created by Candy on 10/3/16. // Copyright ? 2016 Candy. All rights reserved. // #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <vector> #include <string> using namespace std; const int N=1e3+5,INF=(1<<30); inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x; } int n,m,d[N],c[N]; int f[N][N]; void dp(){for(int i=0;i<=m;i++) f[0][i]=0;for(int i=1;i<=n;i++)for(int j=i;j<=m;j++){f[i][j]=f[i][j-1];if(f[i-1][j-1]<INF&&f[i-1][j-1]+d[i]*c[j]<f[i][j])f[i][j]=f[i-1][j-1]+d[i]*c[j];//printf("%d %d %d\n",i,j,f[i][j]); } } int main(int argc, const char * argv[]){memset(f,127,sizeof(f));n=read();m=read();for(int i=1;i<=n;i++) d[i]=read();for(int i=1;i<=m;i++) c[i]=read();dp();printf("%d",f[n][m]);return 0; }?
轉載于:https://www.cnblogs.com/candy99/p/5930687.html
總結
以上是生活随笔為你收集整理的洛谷10月月赛Round.1| P3399 丝绸之路 [DP]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 含泪推荐5款WIN10装机必备的软件
- 下一篇: java删除一级域名下cookie_ja