题意
给你一条直线y=-x/m+b,给定m和b,你可以在第一象限包括坐标轴的区域内直线下方包括直线上选取一点,以它为右上顶点,以坐标原点为左下顶点作矩形,可以退化成线段甚至点,问在它之内包括边上的整点的权值之和最大是多少,一个整点的权值是其横纵坐标之和
思路
枚举纵向高度,根据等差数列求和公式计算权值和,再取最大值
代码
#include <cstdio>
int main()
{
long long m,b,ans,x;
scanf("%I64d%I64d",&m,&b);
ans=0;
for(long long i=0;i<=b;i++)
{
x=(b-i)*m;
if(ans<(x*(x+1)/2+x*(x+1)/2+i*(x+1))*(i+1)/2)
ans=(x*(x+1)/2+x*(x+1)/2+i*(x+1))*(i+1)/2;
}
printf("%I64d\n",ans);
return 0;
}