您的位置:首页 > 大数据 > 人工智能

hdu1789 Doing homework again

2015-09-07 23:12 393 查看
分析:
    简单贪心,一开始没想到思路。
    很直观的,第一步按照score从大到小排序,如果score
相等,则按照deadline从小到大排。
    然后开始选择,让当前的课排在其deadline上面,如果
这一天已经被占用了,那么就往前循环,有位置了就安排,
没了就ans+=score。

// Created by Chenhongwei in 2015.
// Copyright (c) 2015 Chenhongwei. All rights reserved.

#include"iostream"
#include"cstdio"
#include"cstdlib"
#include"cstring"
#include"climits"
#include"queue"
#include"cmath"
#include"map"
#include"set"
#include"stack"
#include"vector"
#include"sstream"
#include"algorithm"
using namespace std;
typedef long long ll;
struct data
{
int s,d;
}a[1010];
bool cmp(data x,data y)
{
if(x.s!=y.s)
return x.s>y.s;
return x.d<y.d;
}
int h[1010];
int main()
{
//ios::sync_with_stdio(false);
// freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int T;
cin>>T;
while(T--)
{
memset(h,0,sizeof h);
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i].d;
for(int i=1;i<=n;i++)
cin>>a[i].s;
sort(a+1,a+n+1,cmp);
int ans=0;
for(int i=1;i<=n;i++)
{
int flag=0;
for(int j=a[i].d;j>=1;j--)
if(!h[j])
{
h[j]=1;
flag=1;
break;
}
if(!flag)ans+=a[i].s;
}
cout<<ans<<endl;
}
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: