POJ 3273 Monthly Expense

mac2022-06-30  125

题目大意:

给N个数,分成M组,每一组最大值的最小值是多少。每一组数必须是连续的。

解题思路:

用二分法来穷举最大值,求最小。是针对最大值的上界和下界二分。

下面是代码:

#include <stdio.h> int a[100005],n,m; bool does(int xian) { int sum=0,cnt=1; for(int i=0; i<n; i++) { if(sum+a[i]<=xian) { sum+=a[i]; } else { cnt++; sum=a[i]; } } if(cnt>m)return false; return true; } int main() { int i,high=0,low=0,mid; scanf("%d%d",&n,&m); for(i=0; i<n; i++) { scanf("%d",&a[i]); high+=a[i]; if(a[i]>low) { low=a[i]; } } while(low<high) { mid=(low+high)>>1; if(does(mid)) { high=mid-1; } else { low=mid+1; } } printf("%d\n",low); return 0; }

转载于:https://www.cnblogs.com/lin375691011/p/3996712.html

相关资源:POJ3273-Monthly Expense
最新回复(0)