洛谷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 }
原文地址:https://www.cnblogs.com/plysc/p/10311406.html