/*********************************************************************************************************************** 题意:有n份作业要做,每份必须在一定时间内完成,否则扣分,求扣分最少的 思路:按扣分的大小降序排序,然后将这份作业尽可能的安排的晚,如果无法安排,就扣分 ***********************************************************************************************************************/ #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <vector> using namespace std; typedef struct { int d, r; }node; node a[1000+10]; bool flag[1000+10]; bool cmp(node a, node b) { return a.r > b.r; } int main() { freopen("data.in" , "r" , stdin); int t; scanf("%d", &t); while(t--) { int ans = 0; memset(flag , true , sizeof(flag)); int n; scanf("%d", &n); for(int i = 0 ; i < n ; i ++) scanf("%d", &a[i].d); for(int i = 0 ; i < n ; i ++) scanf("%d", &a[i].r); sort(a , a + n , cmp); for(int i = 0 ; i < n ; i ++) { int mark = 0x7fffffff; for(int j = a[i].d ; j > 0 ; j --) { if(flag[i]) { flag[i] = false; mark = -1; break; } } if(mark == 0x7fffffff) ans += a[i].r; } printf("%d\n" , ans); } return 0; }
【贪心】【HDOJ-1789】Doing Homework again
原文:http://www.cnblogs.com/ahu-shu/p/3560789.html