hdu 6011Lotus and Characters
Lotus and Characters
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Others)Total Submission(s): 1199 Accepted Submission(s): 409
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 。
Since it's valid to construct an empty string,the answer is always
Input
First line is T(0≤T≤1000) denoting
the number of test cases.
For each test case,first line is an integern(1≤n≤26) ,followed
by n lines
each containing 2 integers vali,cnti(|vali|,cnti≤100) ,denoting
the value and the amount of the ith character.
For each test case,first line is an integer
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
Recommend
jiangzijing2015 | We have carefully selected several similar problems for you: 6018 6017 6016 6015 6014
#include <iostream> #include<math.h> #include<algorithm> #include<memory.h> using namespace std; long long int a[7000000]; long long int Maxn(long long int n,long long int a[]) { long long int max1=-1000000,t=1,sum; for(int i=1;i<=n;i++) { sum=0; t=1; for(int j=n-i;j<n;j++)//到着从最后开始数,假如只有一个数,取最后一个,假如只有两个数,取最后一个和倒数第二个 { sum=sum+t*a[j]; t++; } if(max1<sum) max1=sum; if(sum<0) break; //Since it's valid to construct an empty string,the answer is always ≥0。 //这句是说,如果输入的全是负数的话,输出0,坑死啦。。。 } if(max1<0) cout<<0<<endl; else cout<<max1<<endl; } int main(void) { int num; cin>>num; while(num--) { long long int n,k=0,x,y; cin>>n; for(int i=0;i<n;i++) { cin>>x>>y; while(y--) { a[k++]=x; } } sort(a,a+k);//从小到大排序 Maxn(k,a); } return 0; }