这个题需要先推一下式子,先排序,然后倒着算,举例的话就是
3
a 1
b 1
c 1 a < b < c 然后就是 c + c + c + b + b + a 这样所以根据题目要求,如果有负数,加一个判断,只要当前的总和不小于零就可以
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <math.h>
#include <stack>
#define LL long long
using namespace std;
const int INF = 0x3f3f3f3f;
int dir[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
using namespace std;
pair <int,int> p[30];
int main()
{
int T,N,a,b;
scanf("%d",&T);
while(T--)
{
scanf("%d",&N);
int ans = 0,cut = 0;
for(int i = 0 ; i < N; i++)
{
scanf("%d %d",&a,&b);
p[i] = make_pair(a,b);
}
sort(p, p + N);
for(int i = N - 1; i >= 0; i--)
for(int j = p[i].second; j >= 1; j--)
{
cut += p[i].first;
if(cut < 0) break;
ans += cut;
}
printf("%d\n",ans);
}
return 0;
}
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 ≥0 。
For each test case,first line is an integer n(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.
2 2 5 1 6 2 3 -5 3 2 1 1 1
35 5