zoukankan      html  css  js  c++  java
  • hdu 1789 Doing Homework again

    贪心算法。
    给你一个n代表功课的数目,下面两行各有n个数,第一行的n个数表示功课的截止日期,第二行表示不按时上交的话,所扣的分数。
    求怎样安排,所口的分数最小。
    首先按分数从大到小排序,若分数相同按时间从小到大排序,
    然后,进行循环,当这一天没有功课被的话,将此功课安排大盘这一天,如果,这一天已经被安排,就往前推,最后安排不了就扣分。

    #include"stdio.h"
    #include"string.h"
    #include"stdlib.h"
    typedef struct node
    {
    	int time,score;
    }node;
    node a[1100];
    int cmp(const void*a,const void*b)
    {
    	node *c,*d;
    	c=(node*)a;
    	d=(node*)b;
    	if(c->score!=d->score)//分数不同时,按从大到小排序
    		return d->score-c->score;
    	else//分数相同,按时间的从小到大
    		return c->time-d->time;
    }
    int main()
    {
    	int t,i,j,n,aa[1005];
    	int sum;
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d",&n);
    		memset(aa,0,sizeof(aa));
    		for(i=0;i<n;i++)
    			scanf("%d",&a[i].time);
    		for(i=0;i<n;i++)
    			scanf("%d",&a[i].score);
    		qsort(a,n,sizeof(a[0]),cmp);
    		sum=0;
    		for(i=0;i<n;i++)
    		{
    			for(j=a[i].time;j>0;j--)//从当前一天开始向前倒退,
    			{
    				if(!aa[j])//如果这一天没事,则安排在这一天
    				{
    					aa[j]=1;break;
    				}
    			}
    			if(j==0)//当推到第0天时,说明无法安排进去,只能扣分。
    				sum+=a[i].score;
    		}
    		printf("%d\n",sum);
    	}
    	return 0;
    }


     

  • 相关阅读:
    div常用设置
    Chrome-Charset——Chrome最新版右键工具中的编码修改功能没有了的解决工具
    PHP数据访问(面向对象方式:mysqli类)
    JSON
    jQuery
    jQuery事件
    会话保持
    查询的例子,房屋租赁
    PHP CRUD
    批量删除
  • 原文地址:https://www.cnblogs.com/yyf573462811/p/6365327.html
Copyright © 2011-2022 走看看