hdu6011 Lotus and Characters


Lotus and Characters

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Others)
Total Submission(s): 284    Accepted Submission(s): 102


Problem Description
Lotus has  n  kinds of characters,each kind of characters has a value and a amount.She wants to construct a string using some of these characters.Define the value of a string is:its first character's value*1+its second character's value *2+...She wants to calculate the maximum value of string she can construct.
Since it's valid to construct an empty string,the answer is always  0
 

Input
First line is  T(0T1000)  denoting the number of test cases.
For each test case,first line is an integer  n(1n26) ,followed by  n  lines each containing 2 integers  vali,cnti(|vali|,cnti100) ,denoting the value and the amount of the ith character.
 

Output
For each test case.output one line containing a single integer,denoting the answer.
 

Sample Input
      
      
2 2 5 1 6 2 3 -5 3 2 1 1 1
 

Sample Output
      
      
35 5
 

Source

为蛇么自己是个智障呢。。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = 260010;
int p,n,ans,now;
int save[maxn];
bool compare(int a,int b){
    return a>b;
}
int main(){
    int t,i,j,a,b,tot;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        p = 0;
        for(i=1;i<=n;i++){
            scanf("%d%d",&a,&b);
            for(j=1;j<=b;j++){
                save[++p] = a;
            }
        }
        sort(save+1, save+1+p,compare);
        tot = p;
        int last;
        ans = 0;
        p = 0;
        while(1){
            last = ans;
            ans += save[++p];
            for(i=1;i<p;i++){
                ans += save[i];
            }
            if(ans<last){
                ans = last;
                break;
            }
            if(p==tot){
                break;
            }
        }
        printf("%d\n",ans);
    }
    
    return 0;
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值