题意
把1到n*n填在n*n的格子里。要求每一行都是递增的,使第k列的和最大。
分析
第k列前的格子1 2 .. 按要求填到满格,然后第k列及后面的格子,都从左到右填递增1的数。
第k列的和再加起来,我很矫情地求了公式=_=
代码
#include<cstdio> int n,k; int a[505][505]; int main() { scanf("%d%d",&n,&k); int m=1; for(int i=1; i<=n; i++) for(int j=1; j<k; j++) { a[i][j]=m++; } for(int i=1; i<=n; i++) for(int j=k; j<=n; j++) { a[i][j]=m++; } printf("%d ",(n*(n-2+k)+k+1)*n/2); for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { printf("%d ",a[i][j]); } printf(" "); } return 0; }