NEFU 617 贪心

来源:互联网 发布:vmware安装ubuntu禁用 编辑:程序博客网 时间:2024/06/10 14:37

NEFU 617

好多考试

Problem:617

Time Limit:1000ms

Memory Limit:65536K

Description

期末到了,一学期基本上都没上课的ACMer,们要开始预习了…每一科的考试时间也都出来了,每一科的学分也都知道,如果没预习挂掉的话可是要扣学分的…假设每预习一科需要一天的时间,自己安排复习时间,让挂掉的学分最少。

Input

输入数据有多组,每组三行,每行有多个整数,其中第一个整数为数字N(1<=N<=1000)  (不要问我为什么考这么多),第二行有N个整数数T, Ti(1<=Ti<=1000)表示第i门课的考试时间,第三行有N个数,Ci(1<=Ci<=1000)表示第i门课的学分。

Output

每组数据输出一行,表示扣掉的最小的学分 .

Sample Input

33 3 310 5 131 3 16 2 371 4 6 4 2 4 33 2 1 7 6 5 4

Sample Output

035

Hint

Source


水题,贪心

#include <iostream>#include <cstring>#include <algorithm>struct clas{int lim;int gate;};using namespace std;bool comp(struct clas x,struct clas y){    if(x.gate==y.gate)        return x.lim<y.lim;    return x.gate>y.gate;}int main(){    bool vis[1005];    struct clas a[1005];    int n;    while(cin>>n)    {        memset(vis,0,sizeof(vis));        memset(a,0,sizeof(a));        for(int i=0;i<n;i++)            cin>>a[i].lim;        for(int i=0;i<n;i++)            cin>>a[i].gate;        sort(a,a+n,comp);        int ans=0;        for(int i=0;i<n;i++)        {            int flag=1;            for(int j=a[i].lim-1;j>=0;j--)            {                if(!vis[j])                {                    vis[j]=1;                    flag=0;                    break;                }            }            if(flag)                ans+=a[i].gate;        }        cout<<ans<<endl;    }}


0 0