hdu 1789 Doing Homework again(贪心)

时间:2021-09-10 05:46:01

      题目:fwj 牛,给我讲的,贪心过。我还以为是DP,想了很长时间啊...hdu 1789 Doing Homework again(贪心)

      贪心:先按要扣的分数,从大到小排序,要扣的分数想同,按截止日期,从大到小排序;在开一个数组a[ i]代表第i 天是否被占用,如果被占用,赋值为1;然后从做导游扫描一遍,如果a[arr[i].t]==0,则进行下一轮扫描,如没有时间安排给arr[i].w,则ans+=arr[i].w...

#include<iostream> #include<cstdio> #include<algorithm> using namespace std; struct node{ int t,d; }arr[1010]; int a[10000]; int cmp(node x,node y) { if(x.d==y.d) return y.t<x.t; else return y.d<x.d; } int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&arr[i].t); for(int i=1;i<=n;i++) scanf("%d",&arr[i].d); sort(arr+1,arr+1+n,cmp); /*for(int i=1;i<=n;i++) printf("%d %d\n",arr[i].d,arr[i].t);*/ memset(a,0,sizeof(a)); int ans=0; for(int i=1;i<=n;i++) { int flag=0; for(int j=arr[i].t;j>=1;j--) if(a[j]==0) { a[j]=1; flag=1; break; } if(flag==0) ans+=arr[i].d; } printf("%d\n",ans); } system("pause"); return 0; }