codeforces821B

枚举x或y,然后利用函数关系求出另一个变量,再用等差数列求和公式计算。

因为x的最大值是b*m,y的最大值是b,所以选择枚举y。

求和时,单独考虑x或y。以x为例,每一行的x的和都是定值,可以用x*(1+x)/2来求,x的总和就是(y+1)*x*(1+x)/2.

同理,y的总和是(x+1)*y*(1+y)/2.每一个矩形都如上计算,更新最大值就可以了。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
typedef long long ll;
int main()
{
	ll m,b,x,y,sum,ans=0;
	scanf("%lld%lld",&m,&b);
	for(y=0;y<=b;y++)
	{
		x=m*(b-y);
		sum=(x+1)*x/2*(y+1)+(y+1)*y/2*(x+1);
		ans=max(ans,sum);
	}
	printf("%lld\n",ans);
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/haohaoxuexilmy/article/details/82468394
今日推荐