codeUp 2143 迷瘴 浮點計算 貪心

2021-09-12 17:16:50 字數 1655 閱讀 1675

時間限制: 1 sec  記憶體限制: 32 mb

提交: 666  解決: 201

[提交][狀態][討論版][命題人:外部匯入]

小明正在玩遊戲,他控制的角色正面臨著幽谷的考驗——

幽谷周圍瘴氣瀰漫,靜的可怕,隱約可見地上堆滿了骷髏。由於此處長年不見天日,導致空氣中布滿了毒素,一旦吸入體內,便會全身潰爛而死。

幸好小明早有防備,提前備好了解藥材料(各種濃度的萬能藥水)。現在只需按照配置成不同比例的濃度。

現已知小明隨身攜帶有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

題意就是混合多個體積相同的濃度不同的藥水 要求混合後濃度不超過w%的最大體積下和最大體積下的濃度

分析:開始想複雜了 每次混合都是整個體積的藥水進行混合 所以必定是全部混合起來 不必考慮部分體積

那麼為了使濃度盡可能小 體積盡可能大 我們不妨貪心 按照濃度排序 從小到大 把藥水混合起來 濃度也隨之更新

如果藥水中濃度最小的就大於那個w那麼直接輸出「0 0.00」

否則我們就貪心混合 然後輸出結果 

需要注意的就是浮點數百分比下的溶質數和非百分比下的溶質數要區分清楚

#include#include#include#include#include#include#include#include#include#define morethan(a,b) ((a)>((b)+eps))

using namespace std;

typedef long long ll;

const double eps = 1e-5;

const ll mod = 1000000007;

const int maxn = 100010;

int p[110];

int main()

if(min>w)

sort(p+1,p+1+n,less());

double ansz=0.01*v*p[1];

int anst=v,cnt=1;

for(int i=2;i<=n;i++)

double w = ansz/anst*100.0;//濃度要輸出百分比的值才行

、 printf("%d %.2f\n",anst,round(w)/100.0);

}return 0;

}

2 14 遞迴匹配

遞迴匹配在匹配具有巢狀結構的字串時特別有效。給定算術表示式 1 2 3 4 該表示式具有巢狀結構。如果需要使用正規表示式檢查該表示式的結構是否正確,則使用遞迴匹配能夠解決該問題。注意 本小節中下面介紹的遞迴匹配為.net framework所支援。在.net framework中,正規表示式用於遞迴...

演算法導論2 1 4

有兩個各存放在陣列a和b中的n位二進位制整數,考慮他們的相加問題。翻譯的夠爛 兩個整數的和存放在有n 1個元素的陣列c中,請給出這個問題的形式化描述,並給出偽 考慮兩個1位二進位制數a和b,假設它們的和c是個2位二進位制數,c 1 a 在考慮兩個2位二進位制數 當第一位相加時,先計算進製位c2 a1...

演算法導論 習題2 1 4

有兩個各存放在陣列a和b中的n位二進位制整數,考慮它們的相加問題。兩個整數的和以二進位制形式存放在具有 n 1 個元素的陣列c中。請給出這個問題的形式化描述,並寫出偽 以下是我寫的c 如有錯誤請指出 include stdafx.h include include define n 20 using...