codeforces C. Ilya and Matrix 解题报告

本文介绍了一个算法问题:如何通过排列给定的4n个整数形成2n×2n矩阵,并求得该矩阵的最大美度。美度定义为:当矩阵规模缩小时,其值等于当前最大值加上四个子矩阵的美度之和。文章给出了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:http://codeforces.com/problemset/problem/313/C

题目意思:给定 4n 个整数(可以组成 2n × 2n 大小的矩阵),问通过对这些整数进行排列,求出 the resulting maximum beauty of the matrix。这个最大值的定义是这样的:先定义m为所有整数中的最大值。如果n = 0,那么,这个beauty 数就是m;否则把2n × 2n 大小的矩阵划分为  2n - 1 × 2n - 1- 大小的子矩阵,那么 beauty 数是:m + 其余4个子矩阵的beauty数。

      举个例子吧,假设输入的 4n 为16,16个整数为: 1 3 5 9 9 20 3 7 41 30 1 4 5 10 9 7。先排序,然后可以抽象成这样解决:(数字表示第几步要相加的和)

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 const int maxn = 2*1e6 + 10;
 8 int matrix[maxn];
 9 
10 int main()
11 {
12     int i, j, n;
13     __int64 ans, sum;
14     while (scanf("%d", &n) != EOF)
15     {
16         for (i = 1; i <= n; i++)
17             scanf("%d", &matrix[i]);
18         sort(matrix+1, matrix+1+n);
19         ans = sum = 0;
20         for (j=i=1; i <= n; j <<= 2)
21         {
22             for ( ; i <= j; i++)  // 就是图中的1,2,3
23                 sum += matrix[n-i+1];
24             ans += sum;
25         }
26         printf("%I64d\n", ans);
27     }
28     return 0;
29 }

 

 

转载于:https://www.cnblogs.com/windysai/p/3534230.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值