第一百九十二章 道路游戏(2/3)
第一行 3 个正整数,n,,,意义如题目所述。
接下来的n 行,每行有个正整数,每两个整数之间用一个空格隔开,其中第 i 行描
述了 i 号马路上每个单位时间内出现的金币数量(1≤金币数量≤100),即第i行的第 j(1≤j≤)个数表示第 j 个单位时间内i号马路上出现的金币数量。
最后一行,有 n 个整数,每两个整数之间用一个空格隔开,其中第 i 个数表示在 i 号机器人工厂购买机器人需要花费的金币数量(1≤金币数量≤100)。
输出格式
共一行,包含 1 个整数,表示在 个单位时间内,扣除购买机器人花费的金币之后,小新最多能收集到多少金币。
思路
用一维数组f储存第i秒能获得的最大钱数
因为最多同时存在1个机器人
第i秒时第j个机器人走k次1aaaltkaaalt
f[i]axf[i],f[ik]ay[st]+su
这里是从当前点倒推
st是上一个点
当st0,stn
su要一遍遍加上钱k秒第st路上的金币数
每次减去第st条道路(即第st个工厂机器人)的价格
如果ikaaalt0
直接退出k循环,时间不为负
代码
nt
naaa
naaa
n nasace std
t n,,,b[1001],a[1001][1001],f[1001]
t a
{
scanf“ddd“,aaaan,aaaa,aaaa
nff f[0]0
nrt i1iaaaltni++nrt j1jaaaltj++ scanf“d“,aaaaa[i][j]
nrt i1iaaaltni++ scanf“d“,aaaab[i]
nrt i1iaaalti++
nrt j1jaaaltnj++
{
t tj1
if!t tn
t ssa[t][i]
nrt k1kaaaltk++
{
ifikaaalt0
eak
f[i]axf[i],f[ik]+ssb[t]
t
if!t tn
ss+a[t][ik]
}
}
rtf“d“,f[]
return 0
}
数据范围
对于 40的数据,2≤n≤40,1≤≤40。
对于 90的数据,2≤n≤200,1≤≤200。
对于 100的数据,2≤n≤1000,1≤≤1000,1≤≤。
做法说明
题目呢,比较长,信息比较多,注意不要看错题。但是呢还是比较轻易可以看出这是d题的类型。
d[i][j]表示时间i在j点的最大收益,re[j]表示j点的上一个,x[i]表示在时间i所有位置的最大收益(因为买机器人是任意位置可买,转移时直接用即可),g[i][j]表示状态i,j取最优解时走的步数(这个明显是越小越好啦
本章未完,下一页继续