您的位置:首页 > 大数据 > 人工智能

hdu-1789 :Doing Homework again

2016-05-30 17:27 423 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1789

我的思路:先在输入过程中求出总被减分数sum,再对deadline由小到大进行排序,然后找出deadline的最大值--day,从day到1依次找出deadline大于等于当前day的最大被减分数--reduce,用sum-reduce既得出最后的被减分数的最小值。

我的代码:

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

struct Node
{
int time,fen;
} node[1005];

int cmp(struct Node a,struct Node b)
{
if(a.fen!=b.fen)
return a.fen > b.fen;//扣分越多的越靠前
return a.time < b.time;//扣分相同的时候,deadline越早的越靠前
}

int  visit[2010];//如果当天没用过,值为0;否则为1

int main()
{
int m;
cin >> m;
while(m--)
{
int n,i,j,ans = 0;
memset(visit,0,sizeof(visit));
cin >> n;
for(i = 0; i<n; i++)
{
cin >> node[i].time;
}
for(i = 0; i<n; i++)
{
cin >> node[i].fen;
}
sort(node,node+n,cmp);
int sum = 0;
for(i=0; i<n; i++)
{
j=node[i].time;// 从截止时间开始往前推,如果有一天没用过,这一天就做这一门课,这门课不扣分
while(j)
{
if(!visit[j])
{
visit[j]=1;
break;
}
j--;
}
if(j==0)//如果j=0,表明从time往前的每一天都被占用了,这门课完不成
ans+=node[i].fen;
}
cout << ans << endl;
}

return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: