模拟18 题解

T1

模拟就好了,先扫出来数字的位置,注意数字可能是多位数,然后找到上下边界,再枚举每个矩形的左右两边,找到水管,找下去,并记录那两个水箱连了边,dfs

T2

 搜索的思路,从最靠近出发点的两个精灵点开始,每种状态下只可能向左右两边最靠近的两个位置转移,注意只有符合时间要求并能做出贡献的点才转移,

dp:定义f[i][j][k]为已经考虑了i到j,此时在i点,用了k时间的最有得分,g[i][j][k]为在j点,

转移:

1 f[i-1][j][k+p[i].a-p[i-1].a]=max(f[i-1][j][k+p[i].a-p[i-1].a],f[i][j][k]+((k+p[i].a-p[i-1].a<=p[i-1].t)?p[i-1].b:0));
2 f[i-1][j][k+p[j].a-p[i-1].a]=max(f[i-1][j][k+p[j].a-p[i-1].a],g[i][j][k]+((k+p[j].a-p[i-1].a<=p[i-1].t)?p[i-1].b:0));
3 g[i][j+1][k+p[j+1].a-p[j].a]=max(g[i][j+1][k+p[j+1].a-p[j].a],g[i][j][k]+((k+p[j+1].a-p[j].a<=p[j+1].t)?p[j+1].b:0));
4 g[i][j+1][k+p[j+1].a-p[i].a]=max(g[i][j+1][k+p[j+1].a-p[i].a],f[i][j][k]+((k+p[j+1].a-p[i].a<=p[j+1].t)?p[j+1].b:0));
5 ans=max(ans,max(f[i][j][k],g[i][j][k]));

 

转载于:https://www.cnblogs.com/casun547/p/11343587.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值