您的位置:首页 > 其它

hdu 1789 贪心

2015-07-31 20:00 295 查看
画一个图分析一下就清楚啦,应该优先考虑完成损失最大的作业,因为一天只能完成一门作业,而同时应该倒着从deadline往回找合适的完成时间,因为这样对于别的作业来说,它们有更多的机会被完成。另外,deadline的数据范围也是1000以内。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

const int N = 1007;
bool visit
;

struct Node
{
int d, s;
bool operator < ( const Node & o ) const
{
return s > o.s;
}
} node
;

int main ()
{
int t;
scanf("%d", &t);
while ( t-- )
{
int n, sum = 0;
scanf("%d", &n);
for ( int i = 0; i < n; i++ )
{
scanf("%d", &node[i].d);
}
for ( int i = 0; i < n; i++ )
{
scanf("%d", &node[i].s);
sum += node[i].s;
}
sort( node, node + n );
memset( visit, 0, sizeof(visit) );
for ( int i = 0; i < n; i++ )
{
for ( int j = node[i].d; j > 0; j-- )
{
if ( !visit[j] )
{
visit[j] = 1;
sum -= node[i].s;
break;
}
}
}
printf("%d\n", sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: