题意:m行n列,每行相邻的数,相差最大不超过1,每一列不能有重复的数,提供给你n个1,n个2,...,n个m让你填,对于每一行单独求一个和,每一种填法有个最大行和,作为这种填法的值。问所有填法的值的最小值是多少?
YY 过程简直丧心病狂。
比如3 1
答案就是3
比如3 2
答案就是 3 3 2
比如3 3
答案就是3 3 2 2 1
那么就发现从M递减 等差数列求和= =
居然只是这么简单的ac了
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
int main()
{
int N,M;
while(scanf("%d%d",&M,&N)!=EOF)
{
printf("%d\n",(M+(M-(N-1)/2)+1)*(N-1)/4+(M+(M-(N+1)/2)+1)*(N+1)/4);
}
return 0;
}