计蒜客NOIP模拟赛(2) D2T2紫色百合

【问题描述】

 

牵着你的手的是她,路边开满了紫色的百合花……”

 

你从梦中醒来,却依然忘不了梦中的百合花,每朵百合花都有一个权值,在二进制下写成一行‘1’,第i朵紫色百合的权值在二进制下写成i个‘1’。你想挑出其中一些组成“一束百合花”且价值在二进制下恰好为一个‘1’后面P个‘0’,那么有多少种挑选方案呢?

 

定义“一束百合花”的价值为这些百合花组成的集合的所有子集的权值乘积的和(空集的权值乘积算1)。如价值为13组成的一束百合花价值为1+1+3+1*3=8

 

【输入格式】

 

一行两个正整数N,P,含义如题目中所示n,p<=100000

 

【输出格式】

 

一个整数代表方案数模 998244353 的结果

 

【样例输入1

 

3 3

 

【样例输出1

 

2

 

【样例输入2

 

233 666

 

【样例输出2

 

572514965

 

 

稍稍运用一下数学知识发现题目要求的是选出的集合每个元素+1之后的乘积等于2^P的方案数,取个log就变成了↓

 

1~N选若干个数使得总和等于P,求方案数

 

然后用普通的背包DP可以就拿到60分了

 

 

 然后我们发现,由于物品大小是1~N,所以最多选取O(sqrt(P))个物品,背包就满了

满分做法可以用状态f[i][j]表示选i个物品,占容量为j的方案数

由于每个背包是不同的,所以根据已选的最小的物品分类讨论一下:

如果最小的物品是1,相当于i-1个物品凑出了j-i的大小,然后整体+1

如果最小的物品不是1,相当于i个物品凑出了j-i的大小,然后整体+1

需要注意我们要防止出现选择了大小为N+1的物品的情况,所以需要减去

得到递推式f[i][j]=f[i-1][j-i]+f[i][j-i]-f[i-1][j-(N+1)]

时间复杂度O(Nsqrt(N))

 

 

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 typedef long long lol;
 7 lol Mod=998244353;
 8 int f[451][100011];
 9 lol ans;
10 lol n,p;
11 int main()
12 {lol i,j;
13     cin>>n>>p;
14     f[0][0]=1;
15     for (i=1;i*(i+1)/2<=p;i++)
16     {
17         for (j=i;j<=p;j++)
18         {
19             f[i][j]=f[i-1][j-i]+f[i][j-i];
20             if (j>=(n+1)) f[i][j]-=f[i-1][j-n-1];
21             if (f[i][j]<0) f[i][j]+=Mod;
22             if (f[i][j]>=Mod) f[i][j]-=Mod;
23         }
24         ans=(ans+f[i][p])%Mod;
25     }
26     cout<<ans%Mod;
27 }

 

 

 

 

 

【问题描述】

牵着你的手的是她,路边开满了紫色的百合花……”

你从梦中醒来,却依然忘不了梦中的百合花,每朵百合花都有一个权值,在二进制下写成一行‘1’,第i朵紫色百合的权值在二进制下写成i个‘1’。你想挑出其中一些组成“一束百合花”且价值在二进制下恰好为一个‘1’后面P个‘0’,那么有多少种挑选方案呢?

定义“一束百合花”的价值为这些百合花组成的集合的所有子集的权值乘积的和(空集的权值乘积算1)。如价值为13组成的一束百合花价值为1+1+3+1*3=8

【输入格式】

一行两个正整数N,P,含义如题目中所示

【输出格式】

一个整数代表方案数模 998244353 的结果

【样例输入1

3 3

【样例输出1

2

【样例输入2

233 666

【样例输出2

572514965


【数据范围与约定】

 

测试点编号

N

P

1

8

100

2

12

100

3

15

100

4

100

100

5

1000

1000

6

2000

2000

7

100000

100000

8

100000

100000

9

100000

100000

10

100000

100000


 

转载于:https://www.cnblogs.com/Y-E-T-I/p/7496356.html

内容概要:本文详细介绍了基于结构不变补偿的电液伺服系统低阶线性主动干扰抑制控制(ADRC)方法的实现过程。首先定义了电液伺服系统的基本参数,并实现了结构不变补偿(SIC)函数,通过补偿非线性项和干扰,将原始系统转化为一阶积分链结构。接着,设了低阶线性ADRC控制器,包含扩展状态观测器(ESO)和控制律,用于估系统状态和总干扰,并实现简单有效的控制。文章还展示了系统仿真与对比实验,对比了低阶ADRC与传统PID控制器的性能,证明了ADRC在处理系统非线性和外部干扰方面的优越性。此外,文章深入分析了参数调整与稳定性,提出了频域稳定性分析和b0参数调整方法,确保系统在参数不确定性下的鲁棒稳定性。最后,文章通过综合实验验证了该方法的有效性,并提供了参数敏感性分析和工程实用性指导。 适合人群:具备一定自动化控制基础,特别是对电液伺服系统和主动干扰抑制控制感兴趣的科研人员和工程师。 使用场景及目标:①理解电液伺服系统的建模与控制方法;②掌握低阶线性ADRC的设原理和实现步骤;③学习如何通过结构不变补偿简化复杂系统的控制设;④进行系统仿真与实验验证,评估不同控制方法的性能;⑤掌握参数调整与稳定性分析技巧,确保控制系统在实际应用中的可靠性和鲁棒性。 阅读建议:本文内容详尽,涉及多个控制理论和技术细节。读者应首先理解电液伺服系统的基本原理和ADRC的核心思想,然后逐步深入学习SIC补偿、ESO设、控制律实现等内容。同时,结合提供的代码示例进行实践操作,通过调整参数和运行仿真,加深对理论的理解。对于希望进一步探索的读者,可以关注文中提到的高级话题,如频域稳定性分析、参数敏感性分析等,以提升对系统的全面掌控能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值