zoukankan      html  css  js  c++  java
  • 二分答案 POJ3273

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <queue>
     4 #include <cstring>
     5 #include <algorithm>
     6 
     7 using namespace std;
     8 
     9 int n,m;
    10 int arr[100010];
    11 int reans;
    12 int flag;
    13 
    14 void dfs(int mi,int ma)
    15 {
    16     if(flag==1)
    17         return ;
    18     if(mi==ma)
    19     {
    20         flag=1;
    21         reans=mi;
    22         return ;
    23     }
    24     int num=1;
    25     int tmp=0;
    26     int ans=(mi+ma)/2;
    27     for(int i=0;i<n;i++)
    28     {
    29         if(tmp+arr[i]<=ans)
    30         {
    31             tmp=tmp+arr[i];
    32         }
    33         else
    34         {
    35             tmp=arr[i];
    36             num++;
    37         }
    38     }
    39     if(num>m)
    40     {
    41         dfs(ans+1,ma);
    42     }
    43     else if(num<=m)
    44     {
    45         dfs(mi,ans);
    46     }
    47 }
    48 
    49 int main()
    50 {
    51     while(scanf("%d%d",&n,&m)!=EOF)
    52     {
    53         int ma=0;
    54         for(int i=0;i<n;i++)
    55         {
    56             scanf("%d",&arr[i]);
    57             if(arr[i]>ma)
    58                 ma=arr[i];
    59         }
    60         flag=0;
    61         dfs(ma,1000000000);
    62         cout<<reans<<endl;
    63     }
    64     return 0;
    65 }
    View Code
  • 相关阅读:
    COGS 2104. [NOIP2015]神奇的幻方
    洛谷 P1387 最大正方形
    包和一些常用的模块
    模块
    模块的导入和使用
    函数迭代器与生成器
    函数的小知识
    函数的闭包和装饰器
    函数的进阶
    初识函数
  • 原文地址:https://www.cnblogs.com/wsruning/p/4748168.html
Copyright © 2011-2022 走看看