bestcoder#9--1001--Lotus and Characters

Time Limit: 2000/1000 MS (Java/Others)

Memory Limit: 262144/131072 K (Java/Others)

问题描述

Lotus有nn种字母,给出每种字母的价值以及每种字母的个数限制,她想构造一个任意长度的串。
定义串的价值为:第1位字母的价值*1+第2位字母的价值*2+第3位字母的价值*3……
求Lotus能构造出的串的最大价值。(可以构造空串,因此答案肯定\geq 0≥0)

输入描述

第一行是数据组数T(0 \leq T \leq 1000)T(0≤T≤1000)。
对于每组数据,第一行一个整数n(1 \leq n \leq 26)n(1≤n≤26),接下来nn行,每行2个整数val_i,cnt_i(|val_i|,cnt_i\leq 100)val​i​​,cnt​i​​(∣val​i​​∣,cnt​i​​≤100),分别表示第ii种字母的价值和个数限制。

输出描述

对于每组数据,输出一行一个整数,表示答案。

输入样例

2
2
5 1
6 2
3
-5 3
2 1
1 1

输出样例

35
5
思路:
比赛时我的思路是把字母从小到大排序,然后排除负值字母,但是在终测时挂掉了。
原来,我少考虑了一种情况:
在某些情况下,前面加上一个负值的字母,反而会使后面的每个字母都多乘了1
这样的话,如何处理呢?
前面的字母不确定,但后面的字母一定会是大权值的,是确定的,所以我们从后往前处理,先往里填最大的,
每增加一个字母就更新一遍总和(再加一遍已添加字母的权值),直至总和不会增加为止

转载于:https://www.cnblogs.com/liuzhanshan/p/6338013.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值