【HDU - 2570】迷瘴 (贪心,水题,排序,卡精度有坑)
題干:
通過懸崖的yifenfei,又面臨著幽谷的考驗——?
幽谷周圍瘴氣彌漫,靜的可怕,隱約可見地上堆滿了骷髏。由于此處長年不見天日,導致空氣中布滿了毒素,一旦吸入體內,便會全身潰爛而死。?
幸好yifenfei早有防備,提前備好了解藥材料(各種濃度的萬能藥水)。現在只需按照配置成不同比例的濃度。?
現已知yifenfei隨身攜帶有n種濃度的萬能藥水,體積V都相同,濃度則分別為Pi%。并且知道,針對當時幽谷的瘴氣情況,只需選擇部分或者全部的萬能藥水,然后配置出濃度不大于 W%的藥水即可解毒。?
現在的問題是:如何配置此藥,能得到最大體積的當前可用的解藥呢??
特別說明:由于幽谷內設備的限制,只允許把一種已有的藥全部混入另一種之中(即:不能出現對一種藥只取它的一部分這樣的操作)。?
Input
輸入數據的第一行是一個整數C,表示測試數據的組數;?
每組測試數據包含2行,首先一行給出三個正整數n,V,W(1<=n,V,W<=100);?
接著一行是n個整數,表示n種藥水的濃度Pi%(1<=Pi<=100)。?
Output
對于每組測試數據,請輸出一個整數和一個浮點數;?
其中整數表示解藥的最大體積,浮點數表示解藥的濃度(四舍五入保留2位小數);?
如果不能配出滿足要求的的解藥,則請輸出0 0.00。?
Sample Input
3 1 100 10 100 2 100 24 20 30 3 100 24 20 20 30Sample Output
0 0.00 100 0.20 300 0.23?
解題報告:
? ?因為要求體積最大,又因為每一個的體積都一樣,也就是求數量最多唄。。能多用就多用,,那肯定能先用濃度小的就先用濃度小的啊、、貪心就完事了。(據說直接判斷大于小于,,會WA??得用個eps卡精度(但是我沒試那樣會不會WA))
AC代碼:
#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair #define fi first #define se second using namespace std; const int MAX = 2e5 + 5; const double eps = 1e-8; int dp[105][2]; int a[105]; int n,v,w; int main() {int t;cin>>t;double ans;while(t--) {scanf("%d%d%d",&n,&v,&w);int tmp;for(int i = 1; i<=n; i++) scanf("%d",&a[i]);//,a[i] = tmp*1.0/100;sort(a+1,a+n+1);ans = a[1]*0.01;if(ans > w*0.01) {puts("0 0.00");continue;} // printf("******%lf\n",ans);int ansi=1;for(int i = 2; i<=n; i++) {if((ans*(i-1) + a[i]*0.01)*1.0/i - w*0.01 <= eps ) {ans = (ans*(i-1) + a[i]*0.01)*1.0/i;ansi = i;}else break;}printf("%d %.2f\n",ansi*v,ans);}return 0 ;}?
總結
以上是生活随笔為你收集整理的【HDU - 2570】迷瘴 (贪心,水题,排序,卡精度有坑)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: slee81.exe - slee81是
- 下一篇: 【计蒜客 - 2019南昌邀请赛网络赛