hdu1789
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789
典型的贪心问题,水题(又一次把1000看成了100,唉,wa一次)
#include <iostream> #include <algorithm> using namespace std; struct homework { int deadline; int score; int state; }; int cmp(homework a,homework b) { return a.score>b.score; } homework a[1005]; int visit[1005]; int main() { int t,i; cin>>t; int n,d; int sum; while(t--) { int sum=0; cin>>n; for(i=0;i<n;i++) cin>>a[i].deadline; for(i=0;i<n;i++) cin>>a[i].score; for(i=0;i<n;i++) a[i].state=0; for(i=0;i<1005;i++) visit[i]=0; sort(a,a+n,cmp); for(i=0;i<n;i++) { if(visit[a[i].deadline]==0) {visit[a[i].deadline]=1;a[i].state=1;} else { for(d=a[i].deadline-1;d>=1;d--) { if(visit[d]==0) {visit[d]=1;a[i].state=1;break;}////这里也可以不设置state变量,根据最后的d来判断也可以 } } if(a[i].state==0) sum=sum+a[i].score; } cout<<sum<<endl; } return 0; }