作业最小hdu1798

本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~

    贪心

    要想增加的分数最小,所以要在最后完成时光之前把扣分最多的要完成,所以按照扣除分数的大小排序,这里有个问题,就是排完序前面的规定时光可能小于前边的,选择前边作业的完成时光要尽量大,为前面的作业留下时光。

    

    

    

    

    

    每日一道理
站在历史的海岸漫溯那一道道历史沟渠:楚大夫沉吟泽畔,九死不悔;魏武帝扬鞭东指,壮心不已;陶渊明悠然南山,饮酒采菊……他们选择了永恒,纵然谄媚诬蔑视听,也不随其流扬其波,这是执著的选择;纵然马革裹尸,魂归狼烟,也要仰天长笑,这是豪壮的选择;纵然一身清苦,终日难饱,也愿怡然自乐,躬耕陇亩,这是高雅的选择。在一番选择中,帝王将相成其盖世伟业,贤士迁客成其千古文章。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int time[1010];
struct op
{
	int t,cont;
}p[1010];
int cmp(const void *a,const void *b)
{
	struct op *c,*d;
	c=(struct op *)a;
	d=(struct op *)b;
	if(c->cont!=d->cont)
		return d->cont-c->cont;
	else return c->t-d->t; 
}
int main()
{
	int i,j,sum,n,t;
	scanf("%d",&t);
	while(t--)
	{
         scanf("%d",&n);
		 for(i=0;i<n;i++)
			 scanf("%d",&p[i].t);
		 for(i=0;i<n;i++)
			 scanf("%d",&p[i].cont);
		 qsort(p,n,sizeof(p[0]),cmp);
		 memset(time,0,sizeof(time));
		 sum=0;
		 for(i=0;i<n;i++)
		 {
			 for(j=p[i].t;j>=1;j--)
			 {
				 if(time[j]==0)
				 {
					 time[j]=1;
					 break;
				 }
			 }
			 if(j==0)
				 sum+=p[i].cont;
		 }
		 printf("%d\n",sum);
	}
	return 0;
}

    

    

    

文章结束给大家分享下程序员的一些笑话语录: 一条狗在街上闲逛,看见橱窗里一张告示:「招聘程序员。会编程,有团队精神,至少精通两种语言。均等机会。」
  那条狗就进去申请,但是被拒绝了。
  「我不能雇一条狗在公司里做事。」经理说。
  狗不服气,指着告示上「均等机会」几字抗议。
  经理没法,叹了口气,不屑地问道:「你会编程吗?」
  那条狗默默地走到电脑前,编了个程序,运作准确。
  「你有团队精神吗?」经理问。
  那条狗掉头看了看门外,一大群野狗在外面虎视耽耽。
  「我真的不能雇狗做这份工作。」经理气急败坏地说。
  「就算会编程、有团队精神,但是我需要的雇员至少要能精通两种语言。」
  那条狗抬头看着经理说:「喵-噢。」

--------------------------------- 原创文章 By 作业和最小 ---------------------------------

原文地址:https://www.cnblogs.com/xinyuyuanm/p/3095755.html