码迷,mamicode.com
首页 > 其他好文 > 详细

I - Doing Homework again

时间:2016-07-24 20:42:46      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789

题意:就是你每次完成一门功课都要花一天的时间,问你怎样安排完成作业的顺序能让你被扣的分数最少。竟然是贪心。。。。。。。。。

分析:开始的思路是先按照所扣分数的多少排序,然后就没有下文了。。。。。。看了一下别人的思路,接着应该是 如果分数相同就先执行截止日期短的,然后在截至日期中找是否有空闲的时间,若有就用那天完成一个作业,没有就扣分。

 AC代码:

#include <iostream>//贪心法
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Sc
{
int s,d;
}sc[1010];
bool vis[10000];
bool cmp(Sc a,Sc b)
{
if(a.s==b.s) return a.d<b.d;
else return a.s>b.s;
}

int main()
{
int n,T;
int j;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&sc[i].d);
for(int i=0;i<n;i++)
scanf("%d",&sc[i].s);
sort(sc,sc+n,cmp);//按分数进行排序
memset(vis,0,sizeof(vis));
int sum=0;//没有变化
for(int i=0;i<n;i++)//在截止日期内,核心代码
{
for(j=sc[i].d;j>0;j--)
{
if(!vis[j])//如果这天空闲
{
vis[j]=1;//标记
break;
}
}
if(j==0) sum+=sc[i].s;
}
printf("%d\n",sum);
}

return 0;
}

I - Doing Homework again

标签:

原文地址:http://www.cnblogs.com/lbyj/p/5698990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!