TEST2018.4.14(Noip2011提高组Day2)

本文解析了NOIP2011提高组Day2的三道算法题:计算系数、聪明的质检员和观光公交。分别介绍了杨辉三角的应用、二分查找法和贪心算法,并提供了C++代码实现。

TEST2018.4.14(Noip2011提高组Day2)

为2019级lizw0520zzh的学生献上福利!!!

题目描述(感谢洛谷爸爸):  计算系数    聪明的质检员    观光公交


T1 计算系数:

小学奥数!!!

学过杨辉三角的同学应该很容易推出来:

存在答案数组使得  ans[i][j]=(ans[i-1][j]*a+ans[i-1][j-1]*b);

其中ans[i][j]表示i次方的第j项的系数,故而答案就是ans[k][m+1]。

接下来就是代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define dnt long long
using namespace std;
const dnt MOD=10007;
const int N=1000+23;
dnt ans[N][N];
dnt k,m,n,a,b;

void init() {
	ans[0][1]=1;
	ans[1][1]=a;ans[1][2]=b;
	for(int i=2;i<=k;i++)
		for(int j=1;j<=i+1;j++)
			ans[i][j]=(ans[i-1][j]*a%MOD+ans[i-1][j-1]*b%MOD)%MOD;
}

int main() {
	freopen("factor.in","r",stdin);
	freopen("factor.out","w",stdout);
	cin>>a>>b>>k>>n>>m;
	init();
	cout<<ans[k][m+1]<<endl;
	return 0;
}

不开long long见祖宗!


T2 聪明的质检员:

题外话:事后看了一下洛谷的题解,发现大家都在吐槽这个质检员会不会被开除的问题QAQ(我也这么觉得)。

因为对于不同的W,存在不同的S,所以很显然可以二分答案。

即二分W的值,求出每次Y的值,直到找到两个W值 left和right 使得 Y 最接近 S 。

注意这里一定要检查 left和right 所得到 Y 值与 S 的差的绝对值谁更小(被坑了T_T)。

代码:注意check()可以有多种写法,以下为其中之一

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iostream>
#define maxn 210000
using namespace std;
long long s1[maxn],s2[maxn];
int l[maxn],r[maxn];
int w[maxn],v[maxn];
int n,m;
long long S;
long long check(int x) {
    memset(s1,0,sizeof(s1));
    memset(s2,0,sizeof(s2));
    for (int i=1;i<=n;i++) {
        s1[i]=s1[i-1];s2[i]=s2[i-1];
        if (w[i]>=x) {
            s1[i]+=1;
            s2[i]+=v[i];
        }
    }
    long long res=0;
    for(int i=0;i<m;i++)
        res+=(s1[r[i]]-s1[l[i]-1])*(s2[r[i]]-s2[l[i]-1]);
    return res;
}
int main(){
    freopen("qc.in","r",stdin);
    freopen("qc.out","w",stdout);
    cin>>n>>m>>S;
    for(int i=1;i<=n;i++)
        scanf("%d%d",&w[i],&v[i]);
    for(int i=0;i<m;i++)
        scanf("%d%d",&l[i],&r[i]);
    int left=0,right=*max_element(w+1,w+n+1);
    while(left+1<right){
        int mid=(left+right)/2;
        if (check(mid)<=S)right=mid;
            else left=mid;
    }
    cout<<min(abs(check(left)-S),abs(S-check(right)));
    return 0;
}


T3 观光公交:

吐槽一波:大家看着很复杂,其实巨简单,就是贪心。但是看你贪心策略是什么了。

一开始我想的是找出每段路有几个人走过,先算出总时间,然后对走的人数最多的路进行加速(注意每段路时间不能小于零)。

然后就WA了(想爆粗)。

于是考完试后照例经典算法:百度搜索了一波,发现是贪心策略有错。

正确思路大家可以参照以下网址,在此不加以赘述:

pascal语言(看思路就行)          C++(代码实现)

本人使用第二种方法依葫芦画瓢写了一下,结果在累加距离时加错了,改了好久【我们的同学,一定要细心啊(强行学老李口气)】。

代码【史上最简单写法(有点小夸张)】:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1000+233;
int n,m,k,ans=0;
int arrive[N],leave[N],off[N],d[N],sum[N];
int main() {
    //freopen("bus.in","r",stdin);
    //freopen("bus.out","w",stdout);
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<n;i++) scanf("%d",d+i);
    for(int i=1,a,b,t;i<=m;i++) scanf("%d%d%d",&t,&a,&b),off[b]++,leave[a]=max(leave[a],t),ans-=t;
    int now,use;
    while(k) {
        for(int i=1;i<=n;i++) arrive[i]=max(arrive[i-1],leave[i-1])+d[i-1];
        now=0;
        for(int i=n;i>1;i--)
            if(!d[i-1]) sum[i-1]=0;
            else {sum[i-1]=off[i];if(arrive[i]>leave[i]) sum[i-1]+=sum[i];}
        for(int i=1;i<n;i++)
            if(now<sum[i]) now=sum[i],use=i;
        if(!now) break;
        d[use]--;k--;
    }
    for(int i=1;i<=n;i++) arrive[i]=max(arrive[i-1],leave[i-1])+d[i-1];
    for(int i=1;i<=n;i++) ans+=arrive[i]*off[i];
    printf("%d",ans);
    return 0;
}


那么题解到此结束了!祝大家早日AK(完结撒花)。

内容概要:本文围绕“基于分布式模型预测控制的多个固定翼无人机一致性控制”展开,利用Matlab代码实现相关算法的仿真,旨在通过分布式控制策略实现多架固定翼无人机在复杂动态环境中的协同飞行与一致性控制。研究结合模型预测控制(MPC)方法,构建适用于多无人机系统的分布式优化框架,重点解决了通信受限、信息延迟及无中心化指挥条件下的协同稳定性问题。内容涵盖固定翼无人机的动力学建模、分布式MPC优化求解机制、一致性协议设计、通信拓扑结构分析以及仿真验证全过程,确保多机系统在保持队形一致的同时完成协同任务。; 适合人群:具备自动控制理论、无人机系统建模或多智能体协同控制基础,从事智能无人系统、集群控制、自动化与机器人等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多无人机协同编队飞行、集群侦察、分布式任务执行等实际工程场景;②为分布式MPC算法在多智能体系统中的一致性控制提供可复现的Matlab仿真案例,推动先进控制理论向工程实践转化;③服务于科研论文复现、算法验证、控制系统课程设计与毕业课题参考。; 阅读建议:建议读者结合文中提供的Matlab代码逐模块运行与调试,重点关注分布式MPC在不同通信拓扑下对一致性收敛性能的影响,并可通过调整预测时域、权重矩阵与噪声参数等方式深化对算法鲁棒性与适应性的理解。
内容概要:本文提出了一种基于变分模态分解(VMD)、麻雀搜索算法(SSA)优化与长短期记忆网络(LSTM)相结合的光伏功率预测模型(VMD-SSA-LSTM),旨在提升光伏发电预测的精度与鲁棒性。该方法首先利用VMD对原始非平稳光伏功率序列进行自适应分解,获得一系列具有更稳定特征的本征模态分量(IMFs),有效降低数据复杂性与噪声干扰;随后引入麻雀搜索算法(SSA)对LSTM网络的关键超参数(如学习率、隐层节点数等)进行全局寻优,克服传统试凑法效率低、易陷入局部最优的问题,显著提升模型收敛速度与泛化能力;最后,构建多个LSTM子模型分别预测各模态分量,并将结果重构得到最终的光伏功率预测值。该混合模型充分融合了VMD在信号预处理中的优异分解性能、SSA在参数优化中的高效搜索能力以及LSTM在捕捉时间序列长期依赖关系上的强大建模优势,实现了对复杂气象因素影响下光伏出力波动的高精度拟合与预测。; 适合人群:具备一定电力系统、新能源发电或时间序列预测基础知识,熟悉MATLAB编程环境,从事光伏功率预测、智能电网调度、可再生能源集成、负荷预测等领域研究的科研人员、工程技术人员及高校研究生。; 使用场景及目标:①应用于光伏电站的短期与超短期功率预测,为电网安全调度、电力市场交易、储能系统配置及需求侧响应提供精准数据支撑;②解决传统单一预测模型(如ARIMA、BPNN、单一LSTM)在处理非平稳、强波动性光伏数据时存在的精度不足、稳定性差等问题;③为风电、负荷等其他非平稳时序预测问题提供一种有效的“分解-优化-预测”混合建模范式与技术实现路径。; 阅读建议:建议读者结合文中提供的完整MATLAB代码,深入理解VMD信号分解、SSA优化算法流程及LSTM网络构建的每一个技术环节,通过实际历史数据进行模型复现与对比实验(如与VMD-LSTM、SSA-LSTM等模型比较),掌握参数调优技巧与模型性能评估方法,从而真正掌握该先进混合预测模型的核心思想与应用精髓。
代码转载自:https://pan.quark.cn/s/a4b39357ea24 在当代信息技术行业,深度学习技术的应用已经全面渗透到众多实际情境中,其中生成对抗网络(GAN)以及深度卷积生成对抗网络(DCGAN)被视为促进人工智能领域发展的核心技术之一。接下来将具体阐述如何借助Pytorch框架与MNIST数据集来完成基础GAN和DCGAN的开发,并解析过程中涉及的关键概念。 ### Pytorch框架与MNIST数据集概述 **Pytorch** 被视为一种广受欢迎的开源机器学习平台,其具备动态计算图与高度适应性等特性,因此在学术研究领域备受推崇,能够支持多种类型的深度学习架构。 **MNIST数据集** 是一个包含手写数字的图像集合,常用于训练各类图像识别系统,涵盖从0至9的数字图像,每张图像的尺寸为28x28像素。由于其入门级难度,MNIST数据集特别适合用于教学演示和实验操作。 ### 基础生成对抗网络(GAN)核心概念 **基础GAN** 是一种由生成器(Generator)和判别器(Discriminator)构成的无监督学习框架。生成器的核心任务是创造足以乱真的图像数据,而判别器的关键职责在于精确辨别真实图像与生成图像之间的差异。 1. **生成器**:该模块以随机噪声为输入,通过深度神经网络进行转换,最终输出接近真实图像的数据。其根本目的在于迷惑判别器。 2. **判别器**:对输入数据(无论是真实图像还是生成图像)进行评估,并输出其属于真实样本的概率。判别器的训练重点在于提升识别的精确度。 3. **训练机制**:GAN的训练过程涉及两个网络之间的交替训练,即在锁定一个网络参数的情况下对另一个网络进行训练。首先优化判别器以增强其区分能力...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值