POJ 3273 Monthly Expense 结题报告

POJ 3273 Monthly Expense 结题报告

解题思路:二分题,不难,直接看代码吧。
在这里插入图片描述

#include<iostream>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<queue>
#include<cstring>
#include<string>
#include<string.h>
#include<map>
#include<stack>
#include<stdio.h>
#include<cstdio>
#include<stdlib.h>
#include<fstream>
#include<sstream>
#include<set>
#pragma warning(disable:4996)
#define INF 0x3f3f3f3f
#define ll long long
#define PI acos(-1.0)
const int N = 1000010;
const int maxn = 1e9;
using namespace std;
int m, n;
int a[100005];
bool judge(int mid)
{
	int sum = 0, cnt = 1;
	for (int i = 1; i <= n; i++)
	{
		if (a[i] > mid)
			return false;
		if (sum + a[i] <= mid)
		{
			sum += a[i];
		}
		else
		{
			sum = a[i];
			cnt++;
			if (cnt > m)
				return false;
		}
	}
	return true;
}
int main()
{
	scanf("%d%d", &n, &m);
	int r = 0;
	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &a[i]);
		r += a[i];
	}
	int l = 1;
	int mid,ans;
	while (l <= r)
	{
		mid = (l + r) / 2;
		if (judge(mid))
		{
			r = mid - 1;
			ans = mid;
		}
		else
		{
			l = mid + 1;
		}
	}
	printf("%d\n", ans);
}


发布了64 篇原创文章 · 获赞 0 · 访问量 1466

猜你喜欢

转载自blog.csdn.net/weixin_45566331/article/details/104316909