- 题解
DAY4道路游戏题解
- @ 2024-8-8 20:09:10
题意解析
有条道路连接这个工厂。 秒内每秒会刷新个金币。 你可以在第个工厂花个金币买一个机器人,机器人可以走步,拾起沿途的金币,问你最多能有多少金币
思路解析
我们可以用dp的思想简化这个问题,是秒内最多能捡多少个金币。 可以枚举每一秒,每一个工厂和走~步的情况
#include<bits/stdc++.h>
using namespace std;
long long n,m,p,s1[1005][2010],s2[1005],dp[1005];
int main(){
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
cin>>n>>m>>p;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)cin>>s1[i][j];//输入第i秒第j条道路的收益
}
for(int i=1;i<=n;i++)cin>>s2[i];//输入在i号工厂制造机器人的价格
for(int i=1;i<=m;i++)dp[i]=-2e9;//设置初始值为负无穷
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
long long res=dp[i-1]-s2[j];
for(int z=1;z<=p and i+z-1<=m;z++){//累加计算收益
int a=j+z-1,b=i+z-1;
a-=((a-1)/n)*n;
res+=s1[a][b];
dp[b]=max(dp[b],res);//取最大值
}
}
}
cout<<dp[m];//输出第m秒的最大收益
}
0 条评论
目前还没有评论...