bzoj 4547: Hdu5171 小奇的集合 矩阵乘法

这篇博客介绍了如何解决一个关于集合操作的问题,每次操作可以将集合中两个数的和加入集合,目标是求经过多次操作后集合元素之和的最大值。博主分析出最佳策略是每次都选择当前集合中最大的两个数相加,并通过斐波那契数列的性质来计算最大和。给出了利用斐波那契数列前n项和求解的方法,但未提供证明。
摘要由CSDN通过智能技术生成

题意

有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大值。(数据保证这个值为非负数)
n<=10^5,k<=10^9,|ai|<=10^5。答案对10000007取模。

分析

显然是每次找集合中最大的两个元素相加。先找到最大的两项k1,k2,若一项为负则往后推一项。可以发现集合中加入的第i个数中k1的系数为斐波那契数列第i项,k2系数为第i+1项,那么我们就可以通过求斐波那契数列的前n项和来解决这个问题。
通过打表我发现s(n)=f(n+2)-1,事实证明这貌似也是对的,但我并不会证明。如果有大爷会的话请教教我。

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值