新部落格地址:https://my.oschina.net/hebaodan/blog/
阿新 • • 發佈:2019-01-07
思路:
按代價大小從高到低排序,代價一樣則最後期限早的在前,
按排序順序遍歷,事件安排進終止日期那一天,如果該日期已被那排,就在往前推,
如果最後安排不下,就扣分。
#include<iostream> #include<algorithm> using namespace std; struct data { int d,s; }num[1005]; bool cmp(const data &a,const data &b) { if(a.s!=b.s) return a.s>b.s; else return a.d<b.d; } int main() { int t,n,sum,i,j; int tag[1005];//這天是否已被安排 cin>>t; while(t--) { sum=0; cin>>n; for(i=0;i<n;i++) { cin>>num[i].d; } for(i=0;i<n;i++) cin>>num[i].s; sort(num,num+n,cmp); memset(tag,0,sizeof(tag)); for(i=0;i<n;i++) { for(j=num[i].d;j>0;j--) { if(!tag[j]) { tag[j]=1; break; } } if(!j) sum+=num[i].s; } cout<<sum<<endl; } return 0; }