• POJ 3273


    【题意描述】

    给定一串数据,划分成m段,并把每段内的数据相加,使得m段数据中的最大值最小。

    【思路分析】

    这里很多人可能考虑用DP,但是会超时。那么根据DP与分治的联系,我们可以联想到运用二分法,对所求最大值进行二分,直到所划分区间的数目等于m段即停止。

    这里在确定二分的区间有点技巧,首先low肯定是整个数据的最大值,up是整组数据之和,然后进行逐步二分。不断扩大数据值,使得划分的段数不断减小。

    【AC代码】

     1 #include<iostream>
     2 using namespace std;
     3 #define max 100005
     4 int day_cost[max];
     5 int main()
     6 {
     7     int n,m;
     8     while(cin>>n>>m)
     9     {
    10         int low=0,up=0;
    11         for(int i=0;i<n;i++)
    12             {
    13                 cin>>day_cost[i] ;
    14                 up+=day_cost[i];//寻找二分区间的右端
    15                 if(low<day_cost[i])
    16                     low=day_cost[i];//寻找二分区间的左端点
    17             }
    18             int mid;
    19          while(low<up)//二分条件 
    20          {
    21             mid=(low+up)/2;
    22             int sum1=0,num=0;
    23             for(int i=0;i<n;i++)
    24             {
    25                 if(sum1+day_cost[i]>mid) 
    26                 {num++;
    27                 sum1=day_cost[i];
    28                 }
    29                else  sum1+=day_cost[i];
    30             }
    31             num++;
    32             if(num>m) low=mid+1;//一定加1,否则死循环,造成时间超限!!!
    33             else up=mid;
    34          }
    35         int low_cost=low;//最后的结果是等于最左端数据的
    36         cout<<low_cost<<endl;
    37     }
    38     return 0;
    39 }
  • 相关阅读:
    模型性能评估
    特征提取(机器学习数据预处理)
    决策树(DecisionTree)(附源码)
    支持向量机(SVM)
    Python机器学习/LogisticRegression(逻辑回归模型)(附源码)
    机器学习大致流程
    机器学习的数据预处理
    tensorflow的断点续训
    tensorboard可视化详细
    Linux启动tomcat
  • 原文地址:https://www.cnblogs.com/khbcsu/p/3891871.html
Copyright © 2020-2023  润新知