2143 Problem F 迷瘴

問題 F: 迷瘴

時間限制: 1 Sec  內存限制: 32 MB
 

題目描述

 

小明正在玩遊戲,他控制的角色正面臨着幽谷的考驗——
幽谷周圍瘴氣瀰漫,靜的可怕,隱約可見地上堆滿了骷髏。由於此處長年不見天日,導致空氣中佈滿了毒素,一旦吸入體內,便會全身潰爛而死。
幸好小明早有防備,提前備好了解藥材料(各種濃度的萬能藥水)。現在只需按照配置成不同比例的濃度。
現已知小明隨身攜帶有n種濃度的萬能藥水,體積V都相同,濃度則分別爲Pi%。並且知道,針對當時幽谷的瘴氣情況,只需選擇部分或者全部的萬能藥水,然後配置出濃度不大於 W%的藥水即可解毒。
現在的問題是:如何配置此藥,能得到最大體積的當前可用的解藥呢?
特別說明:由於幽谷內設備的限制,只允許把一種已有的藥全部混入另一種之中(即:不能出現對一種藥只取它的一部分這樣的操作)。

 

輸入

 

輸入數據的第一行是一個整數C,表示測試數據的組數;
每組測試數據包含2行,首先一行給出三個正整數n,V,W(1<=n,V,W<=100);
接着一行是n個整數,表示n種藥水的濃度Pi%(1<=Pi<=100)。

 

輸出

 

對於每組測試數據,請輸出一個整數和一個浮點數;
其中整數表示解藥的最大體積,浮點數表示解藥的濃度(四捨五入保留2位小數);
如果不能配出滿足要求的的解藥,則請輸出0 0.00。

 

樣例輸入

2
1 35 68
1 
2 79 25
59 63 

樣例輸出

35 0.01
0 0.00

經驗總結

emmmm,貌似這幾題貪心算法都是類似的,四捨五入保留兩位小數直接使用%.2f就可以了~

AC代碼

#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
	int cn;
	while(~scanf("%d",&cn))
	{
		for(int i=0;i<cn;i++)
		{
			int n,v,x=0;
			double w,sample[110]={0};
			scanf("%d %d %lf",&n,&v,&w);
			for(int j=0;j<n;j++)
				scanf("%lf",&sample[j]);
			sort(sample,sample+n);
			double lastw=0,result=0;
			for(x=0;x<n;x++)
			{
				lastw+=sample[x];
				if(lastw/(double)(x+1)<=w)
					result=lastw/(double)(x+1);
				else
					break;
			}
			if(x==0)
				printf("0 0.00\n");
			else
				printf("%d %.2f\n",x*v,result*0.01);
		}
	}
	return 0;
}

 

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