zoukankan      html  css  js  c++  java
  • (二分)分巧克力

    这道题求的是在满足特定情况下的最大值,容易得到当巧克力的边长

    越长时,那么切出来的巧克力数量就会越小。在这种情况下,如果想

    要分出的巧克力边长最大,那么考虑到这种情况不难得到二分法对这

    题很适合,只需要不断枚举中间值,最后就能求出最大值。

    这道题和洛谷的这道砍树的题目很类似。

    砍树

    这两道题都要记录一下对于每块巧克可以切多少,然后将其记录下来,

    最后进行判断是否满足条件。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 using namespace std;
     5 const int N = 1e5 + 10;
     6 int h[N], w[N], n, k;
     7 bool check(int mid){
     8     int cnt = 0;
     9     for(int i = 1; i <= n; i ++)
    10         if(h[i] >= mid && w[i] >= mid)
    11             cnt += (h[i] / mid) * (w[i] / mid);
    12     if(cnt >= k) return true;
    13     else return false;
    14 }
    15 int main(){
    16     scanf("%d%d", &n, &k);
    17     for(int i = 1; i <= n; i ++) scanf("%d%d", &h[i], &w[i]);
    18     int l = 1, r = 1e5, ans = 0;
    19     while(l < r){
    20         int mid = l + r + 1 >> 1;
    21         if(check(mid)) l = mid;
    22         else r = mid - 1;
    23     }
    24     cout << l << endl;
    25     return 0;
    26 }
  • 相关阅读:
    模板语法
    django框架中登陆验证功能
    __call__
    JQuery基础
    JS中BOM和DOM操作
    Javascript基础
    css完结
    css深入
    css初识
    html深入解析
  • 原文地址:https://www.cnblogs.com/pureayu/p/13675928.html
Copyright © 2011-2022 走看看