您的位置:首页 > 其它

HDU4572-Bottles Arrangement-找规律

2016-04-08 21:28 253 查看
题意:每一列都是1-m不重复。每一行,相邻两个数相差不能超过一。求各行之和的最大值最小是多少。

YY出的结论。。

第一行n n-1 n-2 n-3在1和n之间来回反弹

第二行n-1 n n n-1 同样反弹

第三行n-2 n-3 同样反弹反弹的时候注意奇数行先向下,偶数行先向上。

#include<bits/stdc++.h>
using namespace std;
int n,m;
int main()
{
while(scanf("%d%d",&m,&n)!=EOF) {
int maxn=0;
for(int i=m;i>=1;i--) {
int ans=0;
int lef=n;
if((m-i)&1) {
if(m-i+1>=n) {
ans=(i+i+n-1)*n/2;
}
else {
ans=(i+m)*(m-i+1)/2;
lef-=m-i+1;
if(lef<=m) {
ans+=(m+m-lef+1)*lef/2;
}
else {
ans+=m*(m+1)/2;
lef-=m;
ans+=lef*(lef+1)/2;
}
}
}
else {
if(i>=n) {
ans=(i+i-n+1)*n/2;
}
else {
ans=i*(i+1)/2;
lef-=i;
if(lef<=m) {
ans+=lef*(lef+1)/2;
}
else {
ans+=m*(m+1)/2;
lef-=m;
ans+=(m+m-lef+1)*lef/2;
}
}
}
maxn=max(maxn,ans);
}
printf("%d\n",maxn);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: