HDU1789【貪心】
阿新 • • 發佈:2018-04-19
clu bre 同時 AC ID IT sizeof 貪心 for
題目大意:給出n個作業,同時表示有n天.第一行輸入表示截止時間(deadline 簡稱dl)第二行表示如果逾期,要扣除對應的學分。
按分數從大到小排序,如果一樣,則dl小的排前面。然後遍歷所以科目,如果dl這天沒有被占用,則這天完成該作業。
#include <iostream> #include <queue> #include <algorithm> #include<cstring> #include<cstdio> using namespace std; #define MAX 1000+10 struct Sub { int deadline, score; }sub[MAX]; bool is_used[MAX]; bool cmp(const Sub&a, const Sub&b) { if (a.score != b.score) return a.score > b.score; return a.deadline < b.deadline; } int main(void) { int t; int n; scanf("%d", &t); int all; int sum; while (t--) { all = 0; memset(is_used, 0, sizeof(is_used)); sum = 0; scanf("%d", &n); int a; for (int i = 1; i <= n; i++) { scanf("%d", &a); sub[i].deadline = a; } for (int i = 1; i <= n; i++) { scanf("%d", &a); sub[i].score = a; sum += a; } sort(sub + 1, sub + 1 + n, cmp); for (int i = 1; i <= n; i++) { int day = sub[i].deadline; if (!is_used[day]) { is_used[day] = 1; all += sub[i].score; } else { while (--day) { if (!is_used[day]) { is_used[day] = 1; all += sub[i].score; break; } } } } printf("%d\n", sum - all); } return 0; }
HDU1789【貪心】