牛客寒假训练营 1 J 小朋友做游戏(前缀和,贪心)

牛客寒假训练营 1 J 小朋友做游戏(前缀和,贪心)_第1张图片

由于两个闹腾的小朋友不能放到一块,那么圆圈最多只能选择n/2个闹腾的小朋友(下取整)

由于要求班级的幸福度最大,那么每次都要选择尽可能多的幸福度的小朋友

其实是和这题类似的

1239. 乘积最大(字符串贪心)_qq12323qweeqwe的博客-CSDN博客

但是不同点在于,乘积最大是有负数的,所以这里可以采用其他的方法

限制条件

  • 最多只能选n/2个闹腾的小朋友
  • 安静的小朋友总数

因为幸福度是相加的,而我们要求最大幸福度之和,所以贪心的想,我们把安静的小朋友和闹腾的小朋友数组分别排序之后,然后应用前缀和就可以在O(1)的时间复杂度下得出选中i个小朋友的幸福度之和

而我们枚举一遍选了多少了安静的小朋友就可以得出答案了

#include 
#include 
using namespace std;
const int N=2e4+10;
int a[N];int b[N];

bool cmp(int a,int b)
{return a>b;}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int x,y,n;
        cin>>x>>y>>n;
        for(int i=1;i<=x;i++)
            cin>>a[i];
        for(int i=1;i<=y;i++)
            cin>>b[i];
        //限制条件1.安静的小朋友至少n/2个
        if(x*2y) continue;
            res=max(res,a[i]+b[j]);
        }
        cout<

你可能感兴趣的:(前缀和,贪心,牛客寒假训练营,游戏,贪心算法,动态规划)