hdu 6011 Lotus and Characters

来源:互联网 发布:mysql局域网访问配置 编辑:程序博客网 时间:2024/05/29 18:03

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
225 16 23-5 32 11 1
 

Sample Output
355
 

Source
BestCoder Round #91


大的肯定往后放。排序后先把正的放进去。

然后考虑往前面放负的。后面所有都会右移一位。因此记录后面所有数的和。如果大于当前负数的绝对值则放入负数

#include<cstdio>#include<algorithm>using namespace std;struct num{int v,c;}a[1001];inline bool cmp(num x,num y){return x.v<y.v;}int main(){int T;scanf("%d",&T);while(T>0){T--;int n;scanf("%d",&n);int i;for(i=1;i<=n;i++)scanf("%d%d",&a[i].v,&a[i].c);sort(a+1,a+1+n,cmp);int ans=0,d=1,la=-1,sum=0;for(i=1;i<=n;i++){if(a[i].v<0)continue;if(la==-1)la=i-1;while(a[i].c>0){ans+=a[i].v*d;sum+=a[i].v;a[i].c--;d++;}}for(i=la;i>=1;i--){while(a[i].c>0){sum+=a[i].v;if(sum<0)break;ans+=sum;a[i].c--;d++;}if(sum<0)break;}printf("%d\n",ans);}return 0;}


1 0
原创粉丝点击