好多考试

来源:互联网 发布:正常人的阅读速度 知乎 编辑:程序博客网 时间:2024/03/29 00:44

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
特别说明:第i天考试,第i天仍可预习一科。额,,你迷糊了吧???我也是啊 可是学校老师告诉我人家是晚上考试!!!
是不是很奇葩呢????

我的一点想法:先按照学分的递减(学分相同的话,在按照考试时间由晚到早)排序。然后安排学分多的先在考得那天复习,若那天已被占用,则从这一天往前找一天复习,找到就按排在那一天

#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>struct A{    int x,y;};using namespace std;bool cmp(const A &a,const A &b){    if(a.y==b.y)        return a.x<b.x;    return a.y>b.y;}int main(){    A a[1005];    bool vis[1005];    int n,i,j,blog,ans=0;    while(~scanf("%d",&n))    {        ans=0;        memset(vis,0,sizeof(vis));        for(i=0; i<n; i++)            scanf("%d",&a[i].x);        for(i=0; i<n; i++)            scanf("%d",&a[i].y);        sort(a,a+n,cmp);        for(i=0; i<n; i++)        {            blog=0;            for(j=a[i].x-1; j>=0; j--)                if(!vis[j])                {                    vis[j]=true;                    blog=1;                    break;                }            if(!blog)                ans+=a[i].y;        }        printf("%d\n",ans);    }    return 0;}

,找不到就等着这科挂吧……




0 0
原创粉丝点击