智力大冲浪

发布时间 2023-04-11 11:14:41作者: 刘海烽
#include<algorithm>
#include<iostream>
#include<cstdio>
#define N 600
using namespace std;
 
typedef struct{
int dl=-1,t=-1,fl=0,val=0;
} Game;
//t代表做的时刻 dl代表deadline 
//定义结构体Game fl=0不做 
//t=-1也代表不做 
bool st(Game p,Game q){return p.val>=q.val;}
//比较函数 
//按从大到小 
int select(int *p,int n){
int i;
for(i=n;i>=0&&p[i]==1;i--);
return i;
}
//返回选择时段 
 
void dispG(Game *G,int n){
int i=0;
for (i=0;i<n;i++)
cout<<G[i].dl+1<<" "<<G[i].t+1<<" "<<G[i].val<<endl;
}
//打印Game 
int main(){
Game G[N];
int m,n,temp,temp2;
while(cin>>m>>n)
{
    int i,Time[N]={0};//某时刻做or不做 
    int sum=0;
    for (i=0;i<n;i++)
        {cin>>temp;G[i].dl=temp-1;}
    for (i=0;i<n;i++)
        cin>>G[i].val;
    sort(G,G+n,st);    
    for (i=0;i<n;i++)
    {
        temp2=select(Time,G[i].dl);
        G[i].t=temp2;
        Time[temp2]=1;
    }
    /*
    dispG(G,n);
    for (i=0;i<n;i++)
    cout<<Time[i]<<endl; 
    */
    for(i=0;i<n;i++)
    {
        if(G[i].t==-1)
        sum+=G[i].val;
    }
    cout<<m-sum<<endl;    
}
return 0;    
}