[bzoj4547][矩阵乘法]小奇的集合

sap 新增科目表_SAP系统中四大科目表的总结 操作科目表定义-OB13 2国家科目表定义-OB13 3集团科目表定义-OB13 4合并科目表(ECCS)定义-CX10 4分配操作科目表到公司代码-OB62 5分配国家科目表到公司代码-OB62 6分配集团科目表到操作科目表-OB13 6分配集团科目表到合并科目表-CXNF 7Operation 8定义集团科目表的科目-FSP0 8定义国家科目表的科目-FSP0 8定义操作科目表的科目-FSP0... 阅读详情

Description

有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大

值。(数据保证这个值为非负数)

Input

第一行有两个整数n,k表示初始元素数量和操作数,第二行包含n个整数表示初始时可重集的元素。

对于100%的数据,有 n<=10^5,k<=10^9,|ai|<=10^5

Output

输出一个整数,表示和的最大值。答案对10000007取模。

Sample Input

2 2

3 6

Sample Output

33

题解

把数集从小到大排序,简单思考一下肯定是每次加入a[n]+a[n-1]最优。
然后稍微推一下可以发现,a[n]与a[n-1]对于k来说,前面的系数都是斐波那契数列里的数
写个矩乘
还没完,假如a[n]>0,a[n-1]<0怎么办,那么每次加入a[n]+a[n-1]就不是最优了
我们暴力出a[n]*k+a[n-1]>=0中k的最小值,代表每次都加入这个。由于abs(a[n])<=10^5,这个暴力最大的复杂度是10^5了
暴力完之后,再用暴力出来的数与a[n]作为新数加入数列中。
由于这题保证答案大于0所以不需要考虑a[n]<0的情况,虽然我考虑了

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const LL mod=10000007;
struct matrix
{
    LL m[5][5];
    matrix(){memset(m,0,sizeof(m));}
}st,tmp,stx,sty;
matrix multi(matrix u,matrix v,int n,int m,int p)
{
    matrix ret;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            for(int k=1;k<=p;k++)
                ret.m[i][k]=(ret.m[i][k]+u.m[i][j]*v.m[j][k])%mod;
    return ret;
}
matrix pow_mod(matrix u,int b)
{
    matrix ans;
    for(int i=1;i<=4;i++)ans.m[i][i]=1;
    while(b)
    {
        if(b%2==1)ans=multi(ans,u,4,4,4);
        u=multi(u,u,4,4,4);b/=2;
    }
    return ans;
}
int pow_(int a,int b)
{
    int ans=1;
    while(b)
    {
        if(b%2==1)ans=(ans*a)%mod;
        a=(a*a)%mod;b/=2;
    }
    return ans;
}
int n,k;LL a[110000],sum;
bool check(int kk)
{   
    sum=a[n-1];
    sum+=a[n]*kk;
    if(sum>=0)return true;
    return false;
}
int main()
{
    scanf("%d%d",&n,&k);
    int bk=0;
    for(int i=1;i<=n;i++){scanf("%lld",&a[i]);if(a[i]>0)bk++;}
    sort(a+1,a+1+n);
    if(bk==0)
    {
        LL ans=0;
        for(int i=1;i<=n;i++)ans=(ans+a[i])%mod;
        ans=(ans+pow_(a[n-1],k))%mod;ans=(ans+pow_(a[n],k))%mod;
        printf("%lld\n",ans);
    }
    else
    {
        if(k==0)
        {
            LL ans=0;
            for(int i=1;i<=n;i++)ans=(ans+a[i])%mod;
            printf("%lld\n",ans);
            return 0;
        }
        if(bk>=2)
        {
            st.m[1][2]=st.m[2][1]=st.m[2][2]=st.m[3][4]=st.m[4][2]=st.m[4][4]=1;
            tmp.m[1][1]=1*a[n-1];tmp.m[2][1]=1*a[n-1];tmp.m[3][1]=0;tmp.m[4][1]=1*a[n-1];
            matrix p=multi(pow_mod(st,k-1),tmp,4,4,1);

            tmp.m[1][1]=1*a[n];tmp.m[2][1]=2*a[n];tmp.m[3][1]=0;tmp.m[4][1]=1*a[n];
            matrix q=multi(pow_mod(st,k-1),tmp,4,4,1);
            LL ans=0;
            for(int i=1;i<=n;i++)ans=(ans+a[i])%mod;
            ans=(ans+q.m[4][1])%mod;ans=(ans+p.m[4][1])%mod;
            printf("%lld\n",ans);
        }
        if(bk==1)
        {
            LL ans=0;
            for(int i=1;i<=n;i++)ans=(ans+a[i])%mod;
            int kk=1,kt=a[n-1]+a[n];ans+=kt;
            while(kt<0){kt+=a[n];ans+=kt;kk++;}
            a[n-1]=min((LL)kt,a[n]);a[n]=max((LL)kt,a[n]);
            st.m[1][2]=st.m[2][1]=st.m[2][2]=st.m[3][4]=st.m[4][2]=st.m[4][4]=1;
            tmp.m[1][1]=1*a[n-1];tmp.m[2][1]=1*a[n-1];tmp.m[3][1]=0;tmp.m[4][1]=1*a[n-1];
            matrix p=multi(pow_mod(st,k-kk-1),tmp,4,4,1);

            tmp.m[1][1]=1*a[n];tmp.m[2][1]=2*a[n];tmp.m[3][1]=0;tmp.m[4][1]=1*a[n];
            matrix q=multi(pow_mod(st,k-kk-1),tmp,4,4,1);
            ans=(ans+q.m[4][1])%mod;ans=(ans+p.m[4][1])%mod;
            printf("%lld\n",ans);
        }
    }
    return 0;
}
SAP MD81创建客户独立需求简介 正常我们用的最多的计划独立需求都是使用的是MD61 ,今天我们说下SAP的另外的一个标准功能客户独立需求MD81。虽然SAP给这个TCODE的描述是客户独立需求,但是实际是没有地方去关联对应的客户信息的。可以看到根据客户需求产生了对应的计划订单,我们创建的时候选择的KSV是按库存生产的,所以转换的时候生产订单也按单生产的。上面填写的这些字段的信息是不是和我们销售订单里面的字段的信息很相似。1)填写交货日期,可以选择按月 ,按日,按周等类型选择对应的日期。保存后会显示对应的客户独立需求的号码,如下图。 阅读详情

相关推荐

HMMER实战:从零部署到序列分析

本文详细介绍了HMMER工具的安装与使用,从源码编译到环境配置,再到核心工具hmmbuild、hmmsearch等的实战应用。通过球蛋白序列分析案例,展示了HMMER在生物信息学中的强大功能,帮助读者快速掌握序列分析技巧。

weixin_42529366的博客 251

4547: Hdu5171 小奇的集合

题目链接题目大意: 有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大值。(数据保证这个值为非负数)题解:mod GXZlegend我的收获:讨论大法2333#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespa

蒟蒻的Bzoj记录 491

如何用AP525 测试输入信号的相位,频响,延时,Pop和卡顿

假设信号不是从AP输出,是功放或者其他的播放设备输出的信号,接入到AP525的输入端。

帮助100万人颠覆负面潜意识,实现人生蜕变,培养1万名潜意识开发导师 2399

【BZOJ4547】小奇的集合

Description有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大值。(数据保证这个值为非负数)

sadnohappy 525

LSF实践专题(15):LSF队列优先级以及抢占功能初探

在LSF暂停作业时,会向作业发送一个SIGTSTP信号,并且将作业状态变成SSUSP(system suspend),表示被系统暂停,这时,最好是作业的应用能够捕获和处理SIGTSTP信号,否则,即使在LSF中,作业会被认为暂停了,并且释放了slots资源,但是在实际OS中,作业进程仍然在继续,并且不会释放CPU等计算资源。是指LSF自动将低优先级作业暂停(suspend),将空余出来的资源交给高优先级队列中的作业使用,等到高优先级队列的作业结束后,再将被暂停的作业恢复(resume)并继续运行。

richycn的博客 1919

保姆级教程:手把手教你为STM32F407和W25Q128制作Keil MDK的SPI Flash下载算法(FLM文件)

本文提供了一份详细的教程,指导开发者如何为STM32F407和W25Q128制作Keil MDK的SPI Flash下载算法(FLM文件)。从理解下载算法的核心机制到实现FlashPrg.c的核心操作,再到链接脚本与地址映射实战,手把手教你完成定制化SPI Flash下载算法的开发与优化。

weixin_28716769的博客 408

[bzoj]4547小奇的集合

[bzoj]4547小奇的集合 先排序找最大的两个数x1,x2 然后发现 两个数都大于0时可以矩阵优化算出和 其他情况特判一下 代码 #include&lt;bits/stdc++.h&gt; using namespace std; typedef long long ll; ll mod=10000007; int n,k; ll s[100010],res; struct M...

jerome_wei的博客 238

微信小程序云开发 - 实现商家转账到零钱(微信企业付款到零钱) V3功能流程及完整实例代码,过微信云开发的云函数实现企业付款到零钱(提供详细示例源码纯云函数实现,证书、密钥、签名等各种常见问题解决方案

企业付款到零钱(微信小程序提现功能,提现到零钱)微信小程序-云函数实现微信企业付款到零钱功能,实现微信商户号中的企业付款到零钱的功能,微信小程序+云开发+商家转账至零钱+微信小程序用户提现,使用云开发环境的云函数实现微信小程序的支付功能,微信小程序实现微信企业付款到零钱功能的流程,V3 V2基于微信云开发的商家转账至零钱,小程序云函数企业付款到零钱功能实现,云开发实现微信商户支付企业付款到零钱功能,不用服务器纯云函数实现,详细示例代码demo教程,API证书错误,转账不到账怎么办,密钥生成有误,转账失败,有

🏆 前端领域优质创作者 1万+

[bzoj 4547]小奇的集合

有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大值。(数据保证这个值为非负数) 这道题一看到它的范围这么大,操作的方法又那么单一,于是便想到了矩阵乘法。相乘的方式为{1,1,1}{0,0,1}{0,1,1}*{s}{m1}[m2}={s+m1+m2}{m2}{m1+m2}(s为当前的总和,m1为次大值,m2为最大值)。但有一...

galiqing的博客 313

【系统分析师】2026年-上半年真题:综合知识-答案及详解(75题完整回忆版)

系统分析师考试备考指南(2026上半年机考) 考试安排: 2026年5月23日举行,分三科连考: 综合知识+案例分析(08:30-12:30,240分钟) 论文(14:30-16:30,120分钟) 科目详情: 综合知识:75道单选(含5道英文题),满分75分,45分及格。 案例分析:5选3主观题,满分75分,45分及格。 论文:4选1论述题,满分75分,45分及格。 重点题型解析: 软件工程:结构化分析以数据字典为核心(题1)。 概率统计:独立事件概率计算(题2,三人解题概率≈0.9)。 数据库安全:DB

数据知道的博客 1889

扣子(Coze)搭建智能体完整实战指南 —— 从零基础入门到写小说及其他需求扩展开发

随着大语言模型进入应用爆发期,我们正在经历从“寻找提示词”向“构建智能体”的范式转移。扣子(Coze)作为字节跳动推出的一站式AI智能体开发与运营平台,极大地降低了AI应用开发的门槛,让非技术人员也能快速搭建具备感知、决策、行动能力的智能体。 本文将手把手带你从零开始,在扣子平台上搭建一个功能完备的**小说创作智能体**,并基于此展示如何将同一套架构扩展到其他需求场景。无论你是写作爱好者、内容创作者,还是希望用AI赋能日常工作的职场人士,这套完整的技术方案都将帮助你快速上手。

huanghm88的专栏 638

【bzoj 4547】【Hdu 5171】小奇的集合(找规律+矩阵快速幂)

秋月清,薄雾散,初露沁心

reverie_mjp的博客 657

Android 中 app freezer 原理详解(二):S 版本

在之前的两篇博文《Android 中app内存回收优化(一)》和《Android 中app内存回收优化(二)》中详细剖析了 Android 中 app 内存优化的流程。这个机制的管理通过 CachedAppOptimizer 类管理,为什么叫这个名字,而不叫 AppCompact 等?freezer,一个针对应用进程长期处于 Cached 状态的优化。在之前博文《app freezer 原理 R 版本》

私房菜 3610

【bzoj4547】【小奇的集合】【矩阵乘法】

有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大 值。(数据保证这个值为非负数) Input 第一行有两个整数n,k表示初始元素数量和操作数,第二行包含n个整数表示初始时可重集的元素。 对于100%的数据,有 n Output 输出一个整数,表示和的最大值。答案对10000007取模。 Sam

sunshinezff的专栏 1006

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

bzoj4547 Hdu5171 小奇的集合 矩阵乘法

Description 有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大 值。(数据保证这个值为非负数) 对于100%的数据,有 n&lt;=105,k&lt;=109,|ai|&lt;=105 输出一个整数,表示和的最大值。答案对10000007取模。 Solution 一开始没看到k的范围。。。sb了 然后看到答案保证非负以为...

olahiuj的博客 279

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【BZOJ4547】Hdu5171 小奇的集合 矩阵乘法

【BZOJ4547】Hdu5171 小奇的集合 Description 有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大值。(数据保证这个值为非负数) Input 第一行有两个整数n,k表示初始元素数量和操作数,第二行包含n个整数表示初始时可重集的元素。 对于100%的数据,有 n<=10^5,k<...

weixin_30662539的博客 99

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

[BZOJ4547]小奇的集合(矩阵乘法)

题目: 我是超链接 题解: 数据范围和转移的相同性让我们很容易判断出来是个矩阵乘法 设计也很简单|sum max1 max2|*系数矩阵 写的时候有一个细节问题,就是当max1=1,max2=-1的时候,按照我们的转移,转移一步之后的结果是max1=0,max2=1,显然不符合大小关系了,事实上只要最大值最小值是一正一副就会出现这种情况,那么我们要处理一下,处理的过程中不要忘记这个时候的...

薇小薇 347

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

题意有一个大小为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系数为

beginend 558

[BZOJ]4547: Hdu5171 小奇的集合 矩阵乘法

Description  有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大 值。(数据保证这个值为非负数) Input 第一行有两个整数n,k表示初始元素数量和操作数,第二行包含n个整数表示初始时可重集的元素。 对于100%的数据,有 n Output 输出一个整数,表示和的最大值。答案对100000

TYB的博客 542

【bzoj4547】Hdu5171 小奇的集合 矩阵乘法

题目描述 有一个大小为n的可重集S,小奇每次操作可以(此处“可以”指的是“必须”)加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大 值。(数据保证这个值为非负数) 输入 第一行有两个整数n,k表示初始元素数量和操作数,第二行包含n个整数表示初始时可重集的元素。 对于100%的数据,有 n<=10^5,k<=10^9,|ai|<=10^5 输出 ...

weixin_30399055的博客 111

【BZOJ-4547】小奇的集合 矩阵乘法 + 递推

4547: Hdu5171 小奇的集合 Time Limit:2 SecMemory Limit:256 MBSubmit:175Solved:85[Submit][Status][Discuss] Description 有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大 值。(数据保证这个值为非负数...

weixin_30693683的博客 151

bzoj4547: Hdu5171 小奇的集合(矩阵乘法)

题目传送门 。 解法: 矩阵乘法啊。 每次选最大的两个数相加。跟斐波那契差不多啊。 用一个位置表示sum就可以了呀。 坑点: 如果第二大的为负数,要用最大的数把这个负数先加到非负数先。然后才能正常做。 代码实现: #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;cstdlib&gt; #include&lt...

Hanks_o的博客 380

【BZOJ4547】【HDU5171】小奇的集合,暴力+矩阵乘法

奥运健儿加油(在这喊有用吗……)

xiaoyimi的博客 713

bzoj 4547: Hdu5171 小奇的集合 (矩阵乘法+递推)

4547: Hdu5171 小奇的集合 Time Limit: 2 Sec  Memory Limit: 256 MB Submit: 166  Solved: 77 [Submit][Status][Discuss] Description  有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大 值。(数据保证这个值为非

clover_hxy的博客 701

Bzoj P4547 [Hdu5171]小奇的集合___递推+矩阵乘法快速幂

题目大意: 有一个可重集SSS,一开始大小为nnn,集合中有nnn个数,a1,a2,...,an−1,ana_1,a_2,...,a_{n-1},a_na1​,a2​,...,an−1​,an​,小奇每次操作可以加入一个数a+ba+ba+b(a,b∈Sa,b∈Sa,b∈S),求kkk次操作后它可获得的SSS的和的最大值。 保证S为非负数保证S为非负数保证S为非负数 n&amp;amp;lt;=105,k&amp;...

生如夏花之绚烂 496
上一篇: [bzoj1449][网络流-费用流]球队收益
下一篇: [bzoj4551][树链剖分]树
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值