本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~
贪心
要想增加的分数最小,所以要在最后完成时光之前把扣分最多的要完成,所以按照扣除分数的大小排序,这里有个问题,就是排完序前面的规定时光可能小于前边的,选择前边作业的完成时光要尽量大,为前面的作业留下时光。
每日一道理
站在历史的海岸漫溯那一道道历史沟渠:楚大夫沉吟泽畔,九死不悔;魏武帝扬鞭东指,壮心不已;陶渊明悠然南山,饮酒采菊……他们选择了永恒,纵然谄媚诬蔑视听,也不随其流扬其波,这是执著的选择;纵然马革裹尸,魂归狼烟,也要仰天长笑,这是豪壮的选择;纵然一身清苦,终日难饱,也愿怡然自乐,躬耕陇亩,这是高雅的选择。在一番选择中,帝王将相成其盖世伟业,贤士迁客成其千古文章。
站在历史的海岸漫溯那一道道历史沟渠:楚大夫沉吟泽畔,九死不悔;魏武帝扬鞭东指,壮心不已;陶渊明悠然南山,饮酒采菊……他们选择了永恒,纵然谄媚诬蔑视听,也不随其流扬其波,这是执著的选择;纵然马革裹尸,魂归狼烟,也要仰天长笑,这是豪壮的选择;纵然一身清苦,终日难饱,也愿怡然自乐,躬耕陇亩,这是高雅的选择。在一番选择中,帝王将相成其盖世伟业,贤士迁客成其千古文章。
#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 作业和最小 ---------------------------------