牛牛有n件帶水的衣服,乾燥衣服有兩種方式。一、是用烘乾機,可以每分鐘烤乾衣服的k滴水。
二、是自然烘乾,每分鐘衣服會自然烘乾1滴水。
烘乾機比較小,每次只能放進一件衣服。
注意,使用烘乾機的時候,其他衣服仍然可以保持自然烘乾狀態,現在牛牛想知道最少要多少時間可以把衣服全烘乾。
本來想的貪心,**如下,
class solution
return t ;
}};
對於上述**的貪心錯誤理解:
把所有的數排序一下, 然後從大到算一下時間。
我這樣計算的結果就是可能存在乙個x , 他x % k = y , 這個y可能是1,也可能是2,甚至別的,那麼這幾滴水也被用做了一分鐘,何不把他自然烘乾,節省時間, 將這個一分鐘的時間給其他滿足x >= k的來用用 , 這樣這個一分鐘完全去掉了k滴水。
但是具體對兩者分配不知,假設每個物品自然烘乾和機器烘乾的時間分別是x1 , x2 , 二分時間mid
在這個條件下,每次二分的時候,自然烘乾一定是滿足條件的,但是機器烘乾不一定滿足條件,我只需要判斷機器烘乾就行了
\[x1 + x2 = mid
\]\[a[i] = x2 * k + x1
\]\[=>x2 = \lceil\frac\rceil
\]還要注意爆int
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #pragma gcc optimize(3 , "ofast" , "inline")
using namespace std ;
#define ios ios::sync_with_stdio(false) , cin.tie(0) , cout.tie(0)
#define x first
#define y second
typedef long long ll ;
const double esp = 1e-6 , pi = acos(-1) ;
typedef pairpii ;
const int n = 1e6 + 10 , inf = 0x3f3f3f3f , mod = 1e9 + 7;
ll in()
while(isdigit(ch)) x = x * 10 + ch - 48 , ch = getchar() ;
return x * f ;
}bool check(int n , vector&a , int k , ll mid)
} return sum <= mid ;
}int solve(int n, vector& a, int k)
return r ;
}int main()
/**/
牛牛晾衣服
題目描述 牛牛有n件帶水的衣服,乾燥衣服有兩種方式。一 是用烘乾機,可以每分鐘烤乾衣服的k滴水。二 是自然烘乾,每分鐘衣服會自然烘乾1滴水。烘乾機比較小,每次只能放進一件衣服。注意,使用烘乾機的時候,其他衣服仍然可以保持自然烘乾狀態,現在牛牛想知道最少要多少時間可以把衣服全烘乾。題目鏈結 思路 二分...
牛牛晾衣服
牛牛有n件帶水的衣服,乾燥衣服有兩種方式。一 是用烘乾機,可以每分鐘烤乾衣服的k滴水。二 是自然烘乾,每分鐘衣服會自然烘乾1滴水。烘乾機比較小,每次只能放進一件衣服。注意,使用烘乾機的時候,其他衣服仍然可以保持自然烘乾狀態,現在牛牛想知道最少要多少時間可以把衣服全烘乾。所以每件衣服 只能烘乾一秒 然...
C 牛牛晾衣服
牛牛有n件帶水的衣服,乾燥衣服有兩種方式。一 是用烘乾機,可以每分鐘烤乾衣服的k滴水。二 是自然烘乾,每分鐘衣服會自然烘乾1滴水。烘乾機比較小,每次只能放進一件衣服。注意,使用烘乾機的時候,其他衣服仍然可以保持自然烘乾狀態,現在牛牛想知道最少要多少時間可以把衣服全烘乾。輸入 3,2,3,9 5輸出 ...