HDU 1789
来源:互联网 发布:剑灵金正恩捏脸数据 编辑:程序博客网 时间:2024/06/05 22:53
主要是一个思路:
按照 reduced socres 从大到小排序, deadline 从大到小或者从小到大都可以。假设这里的deadline是从小到大的
例如有这样一组数据
1 2 2 4 4 45 2 4 5 5 5
排序完之后:首先安排 reduced为5的,第一天就有事情做了,然后查找到第四天的,随后第四天也有事情做了,再次查找,发现第四天有事情做了,所以推到第三天,同理下一个推到第二天,还剩下的两个deadline为2的,发现第一天和第二天都有事情做了,所以只能扣分了,最后把这样的和输出就可以了。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef struct Node { int day; int score;}Node;Node node[2011];int flag[201111];int ans[2011];int cmp(Node a, Node b) { if(a.score == b.score) { return a.day < b.day; } return a.score > b.score;}int main() { int t, n; int i, j, k; int aindex; __int64 res; scanf("%d", &t); for(k = 0; k < t; k++) { memset(ans, 0, sizeof(ans)); memset(flag, 0, sizeof(flag)); scanf("%d", &n); for(i = 0; i < n; i++) { scanf("%d", &node[i].day); } for(i = 0; i < n; i++) { scanf("%d", &node[i].score); } sort(node, node+n, cmp); aindex = 0; for(i = 0; i < n; i++) { int index = node[i].day; if(flag[index] == 1) { for(j = index; j >= 1; j--) { if(flag[j] == 0) { flag[j] = 1; break; } } if(j == 0) { ans[aindex++] = node[i].score; } } else { flag[index] = 1; } } res = 0; for(i = 0; i < aindex; i++) { res += ans[i]; } printf("%I64d\n", res); } return 0;}
- HDU 1789
- hdu 1789
- HDU 1789
- hdu 1789
- hdu-1789
- Hdu 1789
- hdu 1789
- hdu 1789
- HDU-1789
- HDU 1789
- HDU-1789
- HDU 1789
- HDU-1789
- HDU 1789
- hdu 1050+hdu 1789+hdu 3177(贪心)
- HDU ACM 1789
- hdu 1789 贪心
- hdu 1789 贪心算法
- C++ 带有参数的宏定义
- 并行计算中 mpiexec 的执行
- 一次被黑经历与一些反思
- Linux 修改MAC地址
- C++ read(),write() ,seekg(),tellg()
- HDU 1789
- 引用dll时出现“试图加载格式不正确的程序”,解决办法
- Linux C中的opendir()
- Enterprise Architect 中改变UML对象为自定义图像
- Redis学习笔记1--简介及简单安装
- hello python!
- VLAN中继协议(VTP)
- POWER7 的指令周期指标(CPI)模型
- 解决windows传送到linux下中文文件名及文件内容乱码问题