cqoj921E整数匹配

Posted china-mjr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cqoj921E整数匹配相关的知识,希望对你有一定的参考价值。

这是一个贪心题,把我坑的好惨,忘还原得70.上午被卡得,,

首先给出长度为n的一组数,可以两两配对相乘也可以进行相加,问怎样才可以使总和最大?那么可以显然看出来,当这个数为0或1时,我们要相加。其余进行排序,将a>b>c>d中的ab+cd配对,可以证明这样的贪心策略是正确的。排序后,确定相加部分的长度,如果后面是但单数个,那么会多出一个数来,那么也把他加上即可。写一个while,每一次都cnt-=2,最后即可求出最大值,然而这是多组数据,,,

1.不放过任何证明贪心策略正确性的机会

2.多组数据的话一定要把变量还原,否则会对后面的计算产生影响(对心灵产生影响)

代码

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int t;
int n;
int ans=0;
int a[105];//存数 
int book; 
int main()
    cin>>t;
    for(int i=1;i<=t;i++)
        ans=0;
        book=0; 
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        
        sort(a+1,a+n+1);
        if(n==1)
            cout<<a[1]<<endl;
            continue;     
         
        for(int i=1;i<=n;i++)
            if(a[i]==0||a[i]==1)
                book=i;
              
        
        int cnt=n;
        if((n-book)%2==1)
        book+=1;
        
        for(int i=1;i<=book;i++)
            ans+=a[i];
        
        while(cnt>=book+2)
                ans+=a[cnt]*a[cnt-1];
                cnt-=2;
        
        cout<<ans<<endl;
    
    return 0;
 

 

以上是关于cqoj921E整数匹配的主要内容,如果未能解决你的问题,请参考以下文章

常用正则表达式

“查询结构与函数结果类型不匹配。返回类型双精度与第 1 列中的预期类型整数不匹配。”?

正则表达式收集

常用正则表达式

JS 正则匹配整数和小数

js正则匹配浮点数或整数