第一百九十二章 道路游戏(2 / 3)

题目所述。

接下来的n 行,每行有个正整数,每两个整数之间用一个空格隔开,其中第 i 行描

述了 i 号马路上每个单位时间内出现的金币数量(1≤金币数量≤100),即第i行的第 j(1≤j≤)个数表示第 j 个单位时间内i号马路上出现的金币数量。

最后一行,有 n 个整数,每两个整数之间用一个空格隔开,其中第 i 个数表示在 i 号机器人工厂购买机器人需要花费的金币数量(1≤金币数量≤100)。

输出格式

共一行,包含 1 个整数,表示在 个单位时间内,扣除购买机器人花费的金币之后,小新最多能收集到多少金币。

思路

用一维数组f储存第i秒能获得的最大钱数

因为最多同时存在1个机器人

第i秒时第j个机器人走k次1&;lt;k&;lt;p

f[i]axf[i],f[ik]pay[st]+su

这里是从当前点倒推

st是上一个点

当st0,stn

su要一遍遍加上钱k秒第st路上的金币数

每次减去第st条道路(即第st个工厂机器人)的价格

如果ik&;lt;0

直接退出k循环,时间不为负

代码

cde&;lt;iostrea&;;

cde&;lt;cstdio&;;

cde&;lt;cstrg&;;< naspace std;

t n,,p,b[1001],a[1001][1001],f[1001];

t a

{

scanf“ddd“,&;;n,&;;,&;;p;

setf,1000000,sizeoff; f[0]0;

{

t tj1;

if!t tn;

t ssa[t][i];

{

ifik&;lt;0 break;

f[i]axf[i],f[ik]+ssb[t];

t;

if!t tn;

ss+a[t][ik];

}

}

prtf“d“,f[];

return 0;

}

数据范围

对于 40的数据,2≤n≤40,1≤≤40。

对于 90的数据,2≤n≤200,1≤≤200。

对于 100的数据,2≤n≤1000,1≤≤1000,1≤p≤。

做法说明

题目呢,比较长,信息比较多,注意不要看错题。但是呢还是比较轻易可以看出这是dp题的类型。

dp[i][j]表示时间i在j点的最大收益,pre[j]表示j点的上一个,x[i]表示在时间i所有位置的最大收益(因为买机器人是任意位置可买,转移时直接用即可),g[i][j]表示状态i,j取最优解时走的步数(这