本文主要是介绍HDU 1789 Doing Homework again(经典贪心),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
贪心题。 因为一门作业完成时间都是一天。 所以扣分多的自然要先完成。
先按照分值 从大到小排序,再按照 时间从大到小排序。 也就是 分值越高 越晚的先做。
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <string>
#include <map>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <cctype>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
#define MAXN 1000+10
#define INF (1<<30)
#define mod 123456789
struct Homework{int time;int score;friend bool operator < (Homework a, Homework b){if(a.score != b.score)return a.score < b.score;elsereturn a.time > b.time;}
};
int main (){int t;scanf("%d",&t);while(t--){int n;Homework s[MAXN];scanf("%d",&n);int sum = 0;int vis[MAXN] = {0};for(int i = 1; i <= n; i++)scanf("%d",&s[i].time);for(int i = 1; i <= n; i++){scanf("%d",&s[i].score);sum += s[i].score;}sort(s+1,s+1+n);for(int i = n; i >= 1; i--){for(int j = s[i].time; j >= 1; j--){if(!vis[j]){vis[j] = 1;sum -= s[i].score;break;}}}printf("%d\n",sum);}return 0;
}
这篇关于HDU 1789 Doing Homework again(经典贪心)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!