hdu 6011

Posted 早知如此绊人心,何如当初莫相识。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

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

以上是关于hdu 6011的主要内容,如果未能解决你的问题,请参考以下文章

HDU6011

hdu 6011

STAT6011/7611/8305

6011. 完成比赛的最少时间(dp)

第六章章节练习

HDU4057 Rescue the Rabbit(AC自动机+状压DP)