牛客多校第六场 J Upgrading Technology dp

题意:

有n个技能,一开始都是0级,第i个技能从j-1级升到j级,花费$c_{i,j}$,但是花费不一定是正的

所有的技能升到j级时,奖励$d_j$但是奖励也不一定是正的

题解:

用sum[i][j]储存c[i][j]的前缀和,即技能i升到j级后总共的收益。

再开一个数组maxxx[i][j]用于储存技能i至少升到j级的收益,即max(sum[i][j~m])。

然后枚举j,计算$\sum_{k=1}^jd_k+\sum_{i=1}^{n}maxxx[i][j]$即可

但这样带来一个问题,对于某个j,假如每种技能在最少升到j级的情况下,最优情况都是需要升到更高级,那么,所有的技能都升级带来的奖励d你就必须收下,即便这个d是负的。

因此,定义benefit=maxxx[i][j]-sum[i][j],代表某个技能因为升到高于j得到的额外奖励,当对于某个j,所有的技能带来的benefit都大于0,就减去那个最小的benefit,表示以最小的代价把一个技能打回j级,这样就保证了计算出来的奖励d是正确的。

上一篇:Genomic Evidence for Complex Domestication History of the Cultivated Tomato in Latin America


下一篇:android – 使用Parse和Multidex重复输入