UVA 1638 - Pole Arrangement (dp计数)

本文探讨了一个使用动态规划解决计数问题的实例——杆子摆放问题。通过详细解释动态规划的概念及其应用,文章指导读者如何在给定条件约束下,通过递归地构建解决方案,从而解决计数难题。利用动态规划的特性,文章展示了如何通过简单的数学逻辑,逐步推导出复杂问题的解,并提供了实际代码实现。读者将学会如何在面对类似问题时,运用动态规划的方法进行高效求解。

这个题 在自己暑假之前做数学的时候 遇到过。 动规计数。 因为自己动规没学 先学的数学。 所以动规不会。


对于很多计数的题 都无从下手。 没想到第二版刘汝佳 把他拿来当例题了。 看了看详解。  也不过如此。 只是自己的能力还达不到解决这种难题的地步。


有n 跟杆子 长度为 1~n   选择 从 n开始往1 这个方向放。 则保证了 每次放的时候 方的都是最短的。


如果 放在最左边。 一定是 左边数目加一, 放在最右边 右边数目加一。 放在其他位置 一定会被其他杆子挡住,所以 一定不会增加。 但是方的位置会有(i - 2)种


所以 dp【i】【j】【k】  表示 第i根杆子 左边数目为j  右边数目为k  则有dp【i】【j】【k】 = dp【i-1】【j-1】【k】+dp【i-1】【j】【k-1】+dp【i-1】【j】【k】(i - 2)


#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <string>
#include <map>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <cctype>
using namespace std;
#define ll long long
typedef unsigned long long ull;
#define maxn 30
#define INF 1<<30
int main (){
    int num = 0;
    scanf("%d",&num);
    while(num--){
        ll dp[maxn][maxn][maxn] = {0};
        ll n,l,r;
        dp[1][1][1] = 1;
        scanf("%lld%lld%lld",&n,&l,&r);
        for(ll i = 2; i <= n; i++){
            for(ll j = 1; j <= l; j++){
                for(ll k = 1; k <= r; k++){
                    dp[i][j][k] = dp[i-1][j-1][k] + dp[i-1][j][k-1] + dp[i-1][j][k]*(i-2);
                }
            }
        }
        printf("%lld\n",dp[n][l][r]);
    }
    return 0;
}


<think>嗯,用户想知道Simulink中零极点(Zero-Pole)模块的分子部分怎么设置。首先,我得回忆一下Zero-Pole模块的结构。这个模块通常用传递函数的形式表示系统,形式是增益乘以分子多项式的根(零点)除以分母多项式的根(极点)。传递函数一般写作H(s) = K * (s - z1)(s - z2).../(s - p1)(s - p2)...。 用户的问题集中在分子部分的设置方法。根据引用[1],Zeros-Pole模块是用Laplace变量s的零点、极点和增益来表征系统的。所以分子部分对应的是零点。在设置时,分子应该是零点的列表,用向量形式输入,每个元素对应一个零点。比如,如果分子是(s+2)(s+3),那么零点就是-2和-3,输入的时候应该是[-2, -3]。 不过要注意,Simulink中的Zero-Pole模块可能要求输入的是分子和分母的根,而不是多项式系数。这点和Transfer Function模块不同,后者需要输入分子分母的系数向量。比如,在Transfer Function模块里,分子可能是[1 5 6],对应s²+5s+6,而Zero-Pole模块则需要直接输入零点[-2, -3]和极点,然后增益K。例如,如果传递函数是3*(s+2)(s+3)/(s+1)(s+4),那么在Zero-Pole模块中,分子(零点)设置为[-2, -3],分母(极点)设置为[-1, -4],增益是3。 另外,用户可能需要知道如何正确输入复数零点,虽然实际中零点通常是实数或共轭复数对。输入时,复数零点应该以复数形式直接输入,比如-1+2i和-1-2i。 还有,需要注意零点、极点和增益的输入位置。在模块参数设置中,会有Zeros、Poles、Gain三个字段,分别对应分子零点、分母极点和增益K。确保不要混淆顺序,比如把零点误输入到极点部分。 可能用户之前用过Transfer Function模块,现在转向Zero-Pole模块,所以需要区分两者的设置方法。例如,在Transfer Function模块中,分子是多项式系数的降幂排列,而Zero-Pole模块则是根的形式。这可能是用户容易出错的地方,需要重点说明。 另外,引用[3]提到Simulink用于控制系统仿真,其中二阶系统的传递函数例子是num=[30],den=[1 7 0],这对应的是30/(s²+7s),但这是Transfer Function模块的设置方式。而对应的Zero-Pole模块应该分解分母的根,即s(s+7),所以极点应该是0和-7,分子如果是30的话,可能增益是30,而分子零点可能没有,即留空或设为空矩阵。但需要确认Zero-Pole模块是否允许分子为空的情况,即没有零点的情况,此时分子部分可能输入空数组[]。 总结步骤应该是:打开Zero-Pole模块参数,在Zeros处输入零点数组,Poles处输入极点数组,Gain处填写增益值。例如,传递函数H(s)=5(s+1)/(s+2)(s+3),则Zeros填[-1],Poles填[-2, -3],Gain填5。 需要提醒用户注意多项式的因式分解是否正确,以及是否遗漏了增益系数。另外,如果分子是常数项,比如H(s)=5/(s+1),那么零点部分应该留空,增益填5,极点填[-1]。这时候分子没有零点,所以Zeros是空数组。 可能用户遇到的常见错误包括:将多项式的系数误当作零点输入,或者忽略了增益项,导致传递函数结果错误。这时候需要强调Zero-Pole模块是基于因式分解后的根形式,而不是多项式系数。 最后,为了确保用户正确设置,给出一个具体的例子会很有帮助,比如引用中的例子,或者自行构造示例,说明如何将传递函数转换为Zero-Pole模块的参数设置。</think>### Simulink零极点(Zeros-Pole)模块分子设置方法 在Simulink中,零极点(Zero-Pole)模块通过传递函数形式表示系统,其分子部分对应系统的零点(Zeros)。以下是具体设置步骤: 1. **传递函数形式** 零极点模型的传递函数为: $$ H(s) = K \cdot \frac{(s - z_1)(s - z_2)\cdots}{(s - p_1)(s - p_2)\cdots} $$ 其中: - **分子部分**:由零点 $z_1, z_2, \dots$ 构成 - **分母部分**:由极点 $p_1, p_2, \dots$ 构成 - **增益**:标量系数 $K$ [^1] 2. **分子(零点)设置方法** - 在模块参数中,找到 **Zeros** 输入框,以向量形式输入零点值。 - **示例**:若分子为 $(s+2)(s+3)$,则零点为 $-2$ 和 $-3$,输入 `[-2, -3]`(见图1)。 - **复数零点**:直接输入复数形式,例如 `[-1+2j, -1-2j]`。 3. **与其他模块的对比** - **Transfer Function模块**:需输入多项式系数(如 `[1 5 6]` 对应 $s^2 + 5s + 6$)。 - **Zero-Pole模块**:直接输入根(如 `[-2, -3]` 对应 $(s+2)(s+3)$)[^3]。 4. **典型应用示例** - 传递函数 $H(s) = \frac{5(s+1)}{(s+2)(s+3)}$: - Zeros(分子):`[-1]` - Poles(分母):`[-2, -3]` - Gain(增益):`5` ```matlab % MATLAB中验证零极点模型的等效代码 sys = zpk([-1], [-2, -3], 5); % 零点、极点、增益 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值