poj1017--貪心算法

用貪心算法,先從大的開始裝~~測試數據參考:http://blog.sina.com.cn/s/blog_7b7c7c5f0100srtp.html


/*Problem: 1017 
Memory: 156K  Time: 16MS 
Language: C++  Result: Accepted */


#include<stdio.h>
#include<string.h>
#include<algorithm>


int main()
{
	int num[6];//保存輸入
	int rest_5_1, rest_4_2, rest_3_1, rest_3_2, rest_2_1, rest1;
	int count;

	while(1)
	{
		scanf("%d %d %d %d %d %d", &num[0], &num[1], &num[2], &num[3], &num[4], &num[5]);
		if((num[0]+num[1]+num[2]+num[3]+num[4]+num[5]) == 0)
			break;

		rest_5_1 = 0;
		rest_4_2 = 0;
		rest_3_1 = 0;
		rest_3_2 = 0;
		rest_2_1 = 0;
		rest1 = 0;
		count = num[5];//size爲6的產品獨佔一個箱子
		
		if(num[4] != 0)//處理size爲5的,放了一個size爲5的之後就只能放size爲1的了(最多能放11個size爲1的)
		{
			count += num[4];

			rest_5_1 = num[4]*11;
		}

		if(num[3] != 0)//處理size爲4的
		{
			count += num[3];

			rest_4_2 = num[3]*5;
		}

		if(num[2] != 0)//處理size爲3的,有一個size爲3的就要加一個箱子,大於4個小於等於8個就要加兩個
		{
			if(num[2]%4 != 0)
			{
				count += num[2]/4+1;
				if(num[2]%4 == 1)
				{
					rest_3_2 = 5;
					rest_3_1 = 7;
				}
				if(num[2]%4 == 2)
				{
					rest_3_2 = 3;
					rest_3_1 = 6;
				}
				if(num[2]%4 == 3)
				{
					rest_3_2 = 1;
					rest_3_1 = 5;
				}
			}
			else
			{
				count += num[2]/4;
				rest_3_2 = 0;
				rest_3_1 =0;
			}
		}
		if(num[1] > (rest_4_2+rest_3_2))//需要新的空箱子
		{
			if((num[1]-(rest_4_2+rest_3_2))%9 !=0)//每一個空箱子可以裝9個size爲2的產品
			{
				count += (num[1]-(rest_4_2+rest_3_2))/9+1;
				rest_2_1 = 36 - ((num[1]-(rest_4_2+rest_3_2))%9)*4;
			}
			else
			{
				count += (num[1]-(rest_4_2+rest_3_2))/9;
				rest_2_1 = 0;
			}
		}
		else//不需要新的空箱子
		{
			rest_2_1 = (rest_4_2+rest_3_2-num[1])*4;//裝完2之後還剩下的可以裝2的空降轉爲裝1的空間
		}
		rest1 = rest_5_1+rest_3_1+rest_2_1;
		if(num[0] > rest1)
		{
			if((num[0]-rest1)%36 != 0)
				count += (num[0]-rest1)/36+1;
			else
				count += (num[0]-rest1)/36;
		}
		printf("%d\n", count);
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章