返回顶部
大江东去,浪淘尽,千古风流人物。故垒西边,人道是,三国周郎赤壁。乱石穿空,惊涛拍岸,卷起千堆雪。江山如画,一时多少豪杰。遥想公瑾当年,小乔初嫁了,雄姿英发。羽扇纶巾,谈笑间,樯橹灰飞烟灭。故国神游,多情应笑我,早生华发。人生如梦,一尊还酹江月。

洛谷p1070道路游戏

看到题目描述立马蒙了,怎么废话怎么多??不愧是普及组最后一题啊

其实本题不难,理好思路就行了,dp【i】指到了第i个单位时间时最大收益,外层循环时间m,内层枚举起点,再枚举该机器人行走的时间

dp[i]=max(dp[i],dp[i-k]+该时间内总获得的金钱-买机器人时的花费)

 1 #include<bits/stdc++.h>
 2 #define maxn 1010
 3 using namespace std;
 4 
 5 inline int read(){
 6     int x=0,f=1;char ch=getchar();
 7     while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();}
 8     while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}
 9     return f*x;
10 }
11 
12 int money[maxn][maxn],cost[maxn],n,m,p,dp[maxn];
13 
14 int main(){
15     n=read();m=read();p=read();
16     for(int i=1;i<=n;i++)
17         for(int j=1;j<=m;j++)
18         money[i][j]=read();
19     for(int i=1;i<=n;i++) cost[i]=read();
20     memset(dp,-0x3f3f3f3f,sizeof(dp));dp[0]=0;
21     for(int i=1;i<=m;i++)
22         for(int j=1;j<=n;j++){
23             int jj=j,ss=0;
24             for(int k=1;k<=p;k++){
25                 if(k>i) break;
26                 jj--;if(!jj) jj=n;ss+=money[jj][i-k+1];
27                 dp[i]=max(dp[i],dp[i-k]+ss-cost[jj]);
28             }
29         }
30     printf("%d",dp[m]);
31     return 0;
32 }

 

posted @ 2019-01-23 20:57  plysc  阅读(190)  评论(0编辑  收藏  举报