LOADING

加载过慢请开启缓存 浏览器默认开启

Happy Birthday!LevOJ P1475 智力大冲浪

2023/4/25

思路:

贪心法,将所有比赛按照扣钱数从大到小排序,然后遍历。

每次安排扣钱最多的比赛到刚好能完成比赛的时间段,这样能给前面匀出更多的时间安排其他的比赛。

AC代码:

#include<bits/stdc++.h>

using namespace std;

int m,n,flag;

struct game{
    int t;
    int v;
}s[505];

bool cmp(game a,game b){
    return a.v>b.v;
}

bool v[505];

int main(){
    while(scanf("%d%d",&m,&n)!=EOF){
        memset(v,0,sizeof(v));
        for(int i=1;i<=n;i++){
            cin>>s[i].t;
        }
        for(int i=1;i<=n;i++){
            cin>>s[i].v;
        }
        sort(s+1,s+n+1,cmp);
        for(int i=1;i<=n;i++){
            flag=0;
            for(int j=s[i].t;j>0;j--){
                if(v[j]==0){
                    v[j]=1;
                    flag=1;
                    break;
                }
            }
            if(!flag){
                m-=s[i].v;
            }
        }
        cout<<m<<endl;
    }
    
    
    
    return 0;
}