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

2017.12.03

时间:2017-12-17 11:03:53      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:off   方法   soft   排序   turn   char   价值   one   ring   

2017.12.03

贪心

1.金银岛

思路:既然每一种金属都是可以任意切割的,那么就可以先求出每一种金属的单位价值,把它进行排序,从单位价值最大的开始装起,只要背包还有空间就全部装进背包,如果装不完就把剩下的空间全部装这种物体。

for(i=1;i<=s;i++){
	scanf("%lf%lf",&gold[i][1],&gold[i][2]);
	gold[i][3]=gold[i][2]/gold[i][1];
}
for(i=1;i<s;i++){
	int sortmax=i;
	for(j=i+1;j<=s;j++){
		if(gold[sortmax][3]<gold[j][3])
			sortmax=j;
	}
	if(sortmax!=i){
		double t;
		t=gold[i][1];gold[i][1]=gold[sortmax][1];gold[sortmax][1]=t;
		t=gold[i][2];gold[i][2]=gold[sortmax][2];gold[sortmax][2]=t;
		t=gold[i][3];gold[i][3]=gold[sortmax][3];gold[sortmax][3]=t;
	}
}
for(i=1;i<=s&&w>0;i++){
	if(w>=gold[i][1]){
		w-=gold[i][1];
		max+=gold[i][2];
	}
	else if(w<gold[i][1]){
		max+=gold[i][3]*w;
		w=0;
	}
}
printf("%.2f\n",max);

状态:AC

2.An easy problem

思路:要求最小的与题中所给的数I转换成为二进制后所含‘1’的数目相同,就可以先用一个常量保存I的含‘1’值,从I+1开始,每次都判断一下它的含‘1’数量是否和I相等,就可以求出最小的数。

核心代码:

int wen(int k){
	int one=0;
	while(k){
		if(k%2==1)one++;
		k/=2;
	}
	return one;
}

状态:AC

3.Ride to Office

思路:首先他如果是一定要跟一个人,那么在他以前出发的人就可以不再考虑。再输入完后就可以去掉。再者,既然他会总是不断跟着最快的人,可以直接扫一遍,选出时间最短的那个人,它所用的时间就是那个人所用的时间。

核心代码:

for(int i=1;i<=n;i++){
	scanf("%lf%lf",&v,&t);
		if(t>=0){
			m=4.5/v*3600+t;
			if(m<minn)minn=m;
		}
	}
printf("%d\n",int(minn+0.99));

状态:AC

4.书架

思路:既然要用最少的牛数,那每第i次选择,肯定要选剩下的牛中最高的。即扫一遍排序后从大的选起。与金银岛类似。

状态:AC

5.装箱问题

思路:从最大的6*6箱子装起,先装大的,再装小的(在一个大箱子里也遵循这个原理)。可以画图来模拟一下,特别要注意3*3箱子是有多种方法放置的。最后用can1,can2来表示可以装1*1,2*2箱子的数量。

核心代码:

if (a3>0){
	sum++;
	if (a3==1) {
		can1+=7;
		can2+=5;
	}
	else if (a3==2) {
		can1+=6;
		can2+=3;	
	}
	else {
		can1+=5;
		can2+=1;
	}
}

状态:未AC 已听懂

 

2017.12.03

标签:off   方法   soft   排序   turn   char   价值   one   ring   

原文地址:http://www.cnblogs.com/yzyl-Leo-wey/p/8051363.html

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