问题标题: 酷町堂:1416 摆方格 怎么写?

0
0
已解决
毕小曼
毕小曼
初级光能
初级光能

http://judge.codingtang.com/problem/1416/

题目:

题目描述 Description

对于给定的nxn方格中,每个方格放入一个不重复数,放置好nxn个数后,请输出最大主对角线方格数之和(即方格左上角到右下角方格数之和)。

输入描述 Input Description

输出为两行;
第一行输入n(不超过100),它表示nxn个方格。
第二行输入nxn个不重复的数,它表示放入nxn个方格中的数。

输出描述 Output Description

输出为一行,输出方格主对角线最大数之和。

样例输入 Sample Input

2
1 2 3 4

样例输出 Sample Output

7

怎么写?怎么写?

求求哪位大佬帮个忙


0
已采纳
李祈乐
李祈乐
新手光能
新手光能

对于此题,不需要特别规范矩阵的输入,而是用简单的贪心直接求得结果。我们发现,这些数既然可以随意摆放,那我们要求得和最大,就要求出特点的几个数,而这些数都摆在对角线上,而对角线上的数个数就是矩阵的边长,所以思路为:

在输入的n*n个数中,求出最大的n个数,并求得他们的和,即:

for(int i=1;i<=n*n;i++)
        cin>>a[i];
    sort(a+1,a+n*n+1,cmp);//排序是对于这n*n个数,cmp函数指从达到小排序
    long long ans=0;//ans有可能很大,需定义为longlong
    for(int i=1;i<=n;i++)
        ans+=a[i];

 

0
0
王浩然
王浩然
新手光能
新手光能

此题不难,只需要一个简单的排序即可,注意sum需是long long,不然就会87分。不说了甩核心。

sort(a+1,a+n*n+1,cmp);
	for(int i=1;i<=n;i++)
		sum+=a[i];

 

王浩然在2018-08-07 20:12:33追加了内容

缩进有点问题,别在意。

我要回答