hdu1789 Doing homework again

来源:互联网 发布:淘宝宝贝采集软件 编辑:程序博客网 时间:2024/05/17 01:28
分析:
    简单贪心,一开始没想到思路。
    很直观的,第一步按照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;}


0 0
原创粉丝点击