#include <bits/stdc++.h> using namespace std; const int N=1e5+100; int a1[N],b1[N],c1[N],w[N]; long long n,m; long long s; int sheng(int a[],int b[],int c[]){ memset(w,0,sizeof(w));//数组初始化为0,只有在定义时才可以用{0} //cout<<'$'; for(int i=0;i<n;i++){ w[i]=a[i]-b[i]-c[i];//cout<<w[i]; } sort(w,w+n,greater<int>());//把贡献度按从大到小排序,从而得出最优解 s=0; long long p=0; for(int i=0;i<n;i++){//算出得胜次数 s+=w[i]; if(s>0)p++; else break; }//cout<<p<<endl; if(p==0)return -1; return p; } int main() { // 请在此输入您的代码 cin>>n; for(int i=0;i<n;i++)cin>>a1[i]; for(int i=0;i<n;i++)cin>>b1[i]; for(int i=0;i<n;i++)cin>>c1[i]; int a2,b2,c2,j,f; a2=sheng(a1,b1,c1); b2=sheng(b1,a1,c1); c2=sheng(c1,a1,b1); j=max(a2,b2); f=max(j,c2); cout<<f; return 0; }
sort左闭右开又给忘了 从大到小排序需要的函数greater<int>()
蓝桥杯的题目挺难理解的
数组初始化函数memset
最重要的是贪心的思想,我们一直在选择对于我们来说收益最大的,直到当我们遇到选择某一个值的时候其结果会让我们失败,说明我们已经遇到了这个临界值
标签:a1,三国,sheng,int,3.14,long,蓝桥,b1,c1 From: https://www.cnblogs.com/zhengmou/p/18074179