要不再看看题?

先明确题意,一等奖最少 $min1$ 人,最多 $max1$ 人
二等奖最多 $min2$ 人,最少 $max2$ 人
三等奖最多 $min3$ 人,最少 $max3$ 人
只要参加,必定得奖
当有多个奖项分配方案时,取一等奖最多的
若一等奖数量相同,取二等奖最多的
若二等奖数量相同,取三等奖最多的

思路:

首先判断一等奖能否取 $max1$ 个
若不能则二等奖三等奖个数均取最小值,剩下的人数就是一等奖在满足其他条件下的最多人数
若能则判断二等奖能否取 $max2$ 个与上面基本相同

code:这么简单的题还要代码吗?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int n,a[4],b[4];
int ans;
int main()
{
cin>>n;
for(int i=1;i<=3;i++)
cin>>a[i]>>b[i];
if(n-b[1]>=a[2]+a[3])
{
cout<<b[1]<<' ';
n-=b[1];
if(n-b[2]>=a[3])
cout<<b[2]<<' '<<n-b[2];
else cout<<n-a[3]<<' '<<a[3];
}
else
{
cout<<n-a[2]-a[3]<<' ';
cout<<a[2]<<' ';
cout<<a[3]<<' ';
}
cout<<endl;
return 0;
}