本文共 504 字,大约阅读时间需要 1 分钟。
题意:
给出两个串,第一个串称为A,第二个串称为B,两个串的长度相等,求的最大和, F(n, k)表示从1-n,你取出k的数字的子集, F(n, k)就等于你取出的k的数字中的最小值,而题目的要求就是让你重新给A排序,使得这个和值最大。
思路:我们每次从n个数字中取出k个数字时,最优的策略就是取n的前k个数字,这样肯定是最优的,那么给A重新排序的时候,我们可以这样想从n个数字中取出的数字越少和式肯定最大,所以此时我们只需要使得A串中的大的数对应B串中小的数,这样肯定是最大的
代码如下:
#include#include #include #include using namespace std;const int MAXN=200050;struct Dig{ int x; int idx;} d1[MAXN],d2[MAXN];bool cmp1(Dig d1,Dig d2){ return d1.x>d2.x;}bool cmp2(Dig d1,Dig d2){ return d1.x
转载地址:http://lygsi.baihongyu.com/