好多考试
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
3 3 3 3 10 5 1 3 1 3 1 6 2 3 7 1 4 6 4 2 4 3 3 2 1 7 6 5 4
Sample Output
0 3 5
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;
}
}