1. 程式人生 > 其它 >easyui事件和方法的使用方法

easyui事件和方法的使用方法

 這道題目是二分每一段的最大值的最小值(類似於貪)。主要在於check函式。

(check)思路: 輸入一個每一段的最小值 然後看能不能實現。

 接下來主程式可以套模板啦!

程式:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e6+10,N2=2e9;
 4 int n,m,a[N]={0};
 5 int check(int k)
 6 {
 7     int ans=0,num=0;
 8     for(int i=1;i<=n;i++)
 9     {
10         if
(a[i]>k) 11 { 12 return 0; 13 } 14 if(a[i]+num<=k) 15 { 16 num+=a[i]; 17 } 18 else 19 { 20 num=a[i]; 21 ans++; 22 } 23 } 24 ans++; 25 if(ans<=m) return 1; 26 else return
0; 27 } 28 int main() 29 { 30 scanf("%d%d",&n,&m); 31 for(int i=1;i<=n;i++) scanf("%d",&a[i]); 32 int r=N2,l=0; 33 while(l+1!=r) 34 { 35 int mid=(l+r)/2; 36 if(check(mid)==1) r=mid; 37 else l=mid; 38 } 39 printf("%d",r); 40 return 0;
41 }