easyui事件和方法的使用方法
阿新 • • 發佈:2022-05-04
這道題目是二分每一段的最大值的最小值(類似於貪)。主要在於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 return0; 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 }