[Luogu P1230]智力大冲浪

题目链接

这道题,贪就对了。

先按照价值排序,从大到小。当前考虑的的就先放到尽可能晚的时间点,为其他的创造机会,如果这一个的所有可用时间段都被占据,就只能扣钱了。

#include<fstream>
#include<cmath>
#include<iostream>
#include<cstdio>
#include<cstring>
#include <algorithm>
using namespace std;
bool use[1000],dhs;
int m,n;
struct f{
    int qx,fk;
}g[1000];
bool cmp(f a,f b){
    return a.fk>b.fk;
}
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++){
    scanf("%d",&g[i].qx);
}
for(int i=1;i<=n;i++){
    scanf("%d",&g[i].fk);
}
sort(g+1,g+n+1,cmp);
for(int i=1;i<=n;i++){
    if(use[g[i].qx]==0){
        use[g[i].qx]=1;
    }
    else{
        int bj=0;
        for(int j=g[i].qx-1;j>=1;j--){
            if(use[j]==0){
                use[j]=1;
                bj=1;
                break;
            }
        }
        if(bj==0){
            m-=g[i].fk;
        }
    }
}
printf("%d",m);
return 0;
}

猜你喜欢

转载自www.cnblogs.com/clockwhite/p/10807715.html