NYOJ 654喜欢玩warcraft的ltl(01背包/常数级优化)

传送门

Description

ltl 非常喜欢玩warcraft,因为warcraft十分讲究团队整体实力,而他自己现在也为升级而不拖累团队而努力。

他现在有很多个地点来选择去刷怪升级,但是在每一个地点他都要买上充足的补给和合适的道具,以免在刷怪的时候被怪物反杀了,每一个地点的怪物打完了就没有了(还居然不掉金钱跟装备),而且他只要选定了地点就一定会刷完该地点全部的怪物,同时获得对应的经验值。现在ltl 能给出每一个地点用来买补给和道具的钱和打完全部怪物所能获得的经验,但是他所拥有的钱是一定的。所以他想知道怎么选择地点使得他获得的经验最高。

Input

第一行一个整数T,表示测试数据的组数 0<T<=10
第二行两个整数N,M,0<N<=100,0<M<=1000000表示ltl拥有N个不同地点的选择和M的金钱总数
接下来N行每行两个整数ci,vi,(0<ci<=1000000,0<vi<=2000)表示ltl刷完第i个地点所需要购买补给和道具的总钱数和能获取的总经验值

Output

一行一个整数,表示ltl能够获取的最大的经验值

Sample Input

2
3 10
7 7
2 3
3 5
2 5
3 5
2 1

Sample Output

Max experience: 12
Max experience: 6

思路

 01背包问题,主要是常数级的优化。我们所要求的就是f[v],而对于f[v]和最后一件要放入的物品n来说,只需要知道f[v-cn]是多少就行;于是,同理,对f[v-c_{n}] 和物品n-1来说,需要的是f[v-c_{n}-c_{n-1} ]
于是,到物品i,也就是物品n-(n-i),需要的就是f[v-{c_{n}- ... -c_{i}}]。然而,有的物品可能是不会放进去的而且f[-1]是不存在的,于是,max{V-sum{c[i..n]},c[i]}。

 

  

posted @   zxzhang  阅读(419)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示