HDU 1789(模拟&贪心_G题)解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789
-----------------------------------------------------------------------------------
题意:作业,有deadline和惩罚分。如果deadline之前未完成,按惩罚分扣除,问惩罚分的最小值。
思路:贪心的想法,按照罚时从大到小排序,尽可能在deadline那天完成,如果不行,向前递推,占据之前天数完成的时间。然后标记天数,如果之前天数都被标记了。那么,一定需要受到惩罚。也就是说,把惩罚大的作业先安排,安排在deadline之前的可行天。如果不行,加上惩罚。
代码:
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; struct SS { int dl; int pe; }time[1000+5]; int cmp (SS a, SS b) { return a.pe > b.pe; } int main(void){ int T =0; scanf("%d",&T); for(int i=0;i<T;i++){ int n=0; scanf("%d",&n); for(int j=0;j<n;j++){ scanf ("%d", &time[j].dl); } for(int j=0;j<n;j++){ scanf ("%d", &time[j].pe); } sort(time,time+n,cmp); int ans = 0; int flag[1000+5]={0}; for (int m=0; m<n; m++) { int j=0; for(j=time[m].dl; j>=1; --j) if(flag[j]==0) { flag[j] = 1; break; } if(j == 0) ans += time[m].pe; } printf ("%d\n", ans); } return 0; }

浙公网安备 33010602011771号