hdu 6011
题意:Lotus有nn种字母,给出每种字母的价值以及每种字母的个数限制,她想构造一个任意长度的串。定义串的价值为:第1位字母的价值*1+第2位字母的价值*2+第3位字母的价值*3……求Lotus能构造出的串的最大价值。(可以构造空串,因此答案肯定≥0)
思路:一开始想着以价值排序,小于0的不要,然而如果添加负数,那么有可能正数往后移,sum值反而更大
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 struct node{ 5 int x,y; 6 }a[30]; 7 8 bool cmp(node p,node q){ 9 return p.x>=q.x; 10 } 11 int main(){ 12 int t; 13 scanf("%d",&t); 14 while(t--){ 15 int n; 16 scanf("%d",&n); 17 for(int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y); 18 ll xx=0,sum=0; 19 sort(a+1,a+1+n,cmp); 20 for(int i=1;i<=n;i++){ 21 if(a[i].x>=0){ 22 while(a[i].y){ 23 xx+=a[i].x; 24 sum+=xx; 25 a[i].y--; 26 } 27 } 28 else { 29 while(a[i].y){ 30 xx+=a[i].x; 31 if(xx<0) break; 32 sum+=xx;a[i].y--; 33 } 34 } 35 } 36 cout<<sum<<endl; 37 } 38 return 0; 39 }