http://codeforces.com/problemset/problem/625/C
题意:给你一个n和k,要求输出一个n*n的二维矩阵,矩阵数字由1-n*n组成,且每一行保持单调递增,要求第k列
数字和尽可能大;
分析:刚一开始看到题目没有一点思路,,还是题目做少了,,,,#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long Ull;
#define MM(a,b) memset(a,b,sizeof(a));
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const double pi=acos(-1);
const int mod=100000000;
ll max(ll a,ll b)
{return a>b?a:b;};
int min(int a,int b)
{return a<b?a:b;};
int a[505][505];
int main()
{
int n,k;
while(~scanf("%d %d",&n,&k))
{
int sum=0,cnt=0;
for(int i=1;i<=n;i++)
for(int j=1;j<k;j++)
a[i][j]=++cnt;
cnt=n*n+1;
for(int i=n;i>=1;i--)
{
for(int j=n;j>=k;j--)
a[i][j]=--cnt;
sum+=a[i][k];
}
printf("%d\n",sum);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
printf("%d%c",a[i][j],j==n?'\n':' ');
}
return 0;
}
贪心的做,第k列左边有n*(k-1)个数字,
贪心的让这些数字最小(因为尽可能的让大数往第k列放),>=k列的,再贪心的
让大数尽可能的放在第k列
,但是第
k列及其
以后又都要保持单调性,那么倒着输出就好