题目:
比赛共 m 分钟,每支参赛队伍有三位同学并且只配备一台电脑,比赛中共命题 n 题。本题会给出长度为 n 的 a,b,c 三个数组。
ai 为这支队伍第一位同学完成第 i 题所需的时间。
bi 为这支队伍第二位同学完成第 i 题所需的时间。
ci 为这支队伍第三位同学完成第 i 题所需的时间。
要求一台电脑同时只能一位同学编写程序,问在比赛时间之内这支队伍在最优策略下最多可以通过多少道不同的题目?
输入
第一行包含两个整数 n,m 表示本次比赛有 n 道题目,比赛计时 m 分钟。
第二行包含 n 个整数,为 a 数组。
第三行包含 n 个整数,为 b 数组。
第四行包含 n 个整数,为 c 数组。
输出
一行一个整数 ans ,表示这支队伍在比赛中最多可以通过的不同题目数量。
样例输入
5 60
10 20 30 40 61
61 61 61 61 5
50 40 30 20 61
样例输出
4
知道是贪心,但是不知道怎么写,乱写得30……qwq
//乱写的代码
#include<bits/stdc++.h>
using namespace std;
int n,m,p1=0,p2=0,p3=0;
int f[4][5001],flag[4][5001],num=-3;
int main() {
scanf("%d%d",&n,&m);
for(int i=1;i<=3;i++){
for(int j=1;j<=n;j++) scanf("%d",&f[i][j]);
}
while(m--){
int minn=INT_MAX,mini=0;
if(p1==0){
num++;
for(int i=1;i<=n;i++){
if(f[1][i]<minn&&flag[1][i]==0){
minn=f[1][i];
mini=i;
}
}
p1=minn;
flag[1][mini]=flag[2][mini]=flag[3][mini]=1;
}
minn=INT_MAX,mini=0;
if(p2==0){
num++;
for(int i=1;i<=n;i++){
if(f[2][i]<minn&&flag[2][i]==0){
minn=f[2][i];
mini=i;
}
}
p2=minn;
flag[1][mini]=flag[2][mini]=flag[3][mini]=1;
}
minn=INT_MAX,mini=0;
if(p3==0){
num++;
for(int i=1;i<=n;i++){
if(f[3][i]<minn&&flag[3][i]==0){
minn=f[3][i];
mini=i;
}
}
p3=minn;
flag[1][mini]=flag[2][mini]=flag[3][mini]=1;
}
p1--;
p2--;
p3--;
}
cout<<num<<endl;
return 0;
}