传送门:http://codeforces.com/problemset/problem/625/C
用1~n^2填充n*n的方阵,满足
所有的数都使用了一次
每一行的数是递增的
第k列的数的和尽量大
求满足的方阵
贪心,将1~k-1列先竖着填充1~n*(k-1)的数,然后k~n列横着填充
代码如下:
#include<cstdio>
using namespace std;
int n,k;
int s[505][505];
int ans=0;
int main()
{
scanf("%d%d",&n,&k);
int now=0;
for (int i=1;i<=n;i++)
{
for (int j=1;j<k;j++)
{
now++;
s[i][j]=now;
}
}
for (int i=1;i<=n;i++)
{
for (int j=k;j<=n;j++)
{
now++;
s[i][j]=now;
if (j==k)
{
ans+=now;
}
}
}
printf("%d\n",ans);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
printf("%d ",s[i][j]);
}
printf("\n");
}
return 0;
}