494. Target Sum(暴力求解和二项式求解)

探讨了给定非负整数列表及目标值S时,如何通过分配加减符号使列表元素之和等于S的方法。介绍两种解决方案:暴力求解与二项式方法,并通过实例说明二项式的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as its new symbol.

Find out how many ways to assign symbols to make sum of integers equal to target S.

Input: nums is [1, 1, 1, 1, 1], S is 3. 
Output: 5
Explanation: 

-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3

There are 5 ways to assign symbols to make the sum of nums be target 3.
问题分析:

1.暴力求解: 列举出所有的情况,每个数字的可能性有2,一共存在2^(arr.size())种情况,从中pick 出来和为target的样例。

2.二项式(只针对整数取1的情况):sum(+)+sum(-)=N;

                 sum(+)-sum(-)=target;

sum(+)=(N+target)/2; 也就是说从N个数中要pick出来多少个数使得这几个数的和为sum(+),那么很容易想到即满足二项式Cn sum(+)=就是最终的结果;例如eg1中的sum(+)=(5+3)/2,那么从5个里面选4个出来,最终的final即为5。对于全为1的状态

class Solution {
public:
    int multiple(int k){
        int sum=1;
        for(int i=k;i>0;i--)
           sum*=i;
    
        return sum;
    }
    int findTargetSumWays(vector<int>& nums, int S) {
        if((nums.size()+S)%2!=0){
            return 0;
        }
        int target=(nums.size()+S)/2;
        return multiple(nums.size())/multiple(target)/multiple(nums.size()-target); 
    }
};


### MPC 模型预测控制算法实现与应用 #### 理论基础 MPC模型预测控制的核心在于对未来一段时间内的系统状态做出预测,并据此确定当前时刻的最佳控制策略。此方法通过构建优化问题,使得控制系统能够动态调整其行为以达到预期目标[^1]。 #### 控制流程概述 对于基于MPC的车辆控制系统而言,在每一个时间步长里都需要执行如下操作:首先依据现有条件估计未来的行驶状况;接着定义一个成本函数用来评估不同决策的好坏程度;最后求解这一最小化/最大化问题从而获得最佳行动方案并实施之。这样的循环往复确保了即使面对复杂多变的道路情况也能维持良好的驾驶体验安全性[^2]。 #### 数学建模与优化求解 为了有效运用MPC技术处理实际问题,必须先建立起精确可靠的物理或统计学上的模拟框架——即所谓的“预测模型”。之后便是设定适当的目标函数(Objective Function),它通常由两部分组成:一是衡量偏离理想路径的程度(State Error Cost),二是反映采取特定措施所需付出代价大小的关系式(Control Effort Cost)[^4]。例如: \[ J=\sum_{k=0}^{N}\left(x_k-x_d\right)^TQ\left(x_k-x_d\right)+u_k^TRu_k \] 其中 \(x\) 表示状态向量,\(u\) 是指输入变量\(N\)则表示预测范围长度。\(^T\) 符号意味着转置运算符; 而矩阵\(Q,R\) 分别对应于上述提到的状态误差惩罚项及其对应的权重系数集合。 ```python import numpy as np from scipy.optimize import minimize def mpc_objective(u, A, B, C, D, x_0, ref_state, Q, R, N): cost = 0 state = x_0 for i in range(N): u_i = u[i * len(B):(i + 1) * len(B)] # State update equation next_state = A @ state + B @ u_i # Calculate the error between reference and current states. err = (ref_state - next_state).reshape(-1,) # Add to total cost using quadratic form of errors weighted by matrices Q & R cost += err.T @ Q @ err + u_i.T @ R @ u_i state = next_state return cost A = ... # System matrix from linearized model around operating point B = ... # Input matrix C = ... # Output matrix not used here but part of full system description D = ... # Direct transmission term often zero or negligible # Initial condition/state vector at time t=k x_0 = ... # Reference trajectory/target setpoint we want our controlled plant/output y(t)=Cx(t)+Du(t)to follow over horizon length T=N*Δt where Δt is sampling period/time step size ref_state = ... # Weighting factors defining relative importance given to tracking performance vs control effort minimization within objective function formulation above Q = ... R = ... # Prediction Horizon Length N = ... initial_guess_for_controls = [0]*len(B)*N result = minimize(mpc_objective, initial_guess_for_controls, args=(A,B,C,D,x_0,ref_state,Q,R,N), method='SLSQP') optimal_control_sequence=result.x.reshape((N,-1)) ``` 这段Python代码展示了如何设置并解决一个简单的线性离散时间系统的MPC问题。这里假设已经得到了描述对象特性的ABCD四个基本参数以及初始状态`x_0`, 参考轨迹 `ref_state`. 同时还设定了两个正定对角阵作为权衡因子`Q`,`R`. #### 强化学习增强版MPC 除了传统的基于固定规则的方法外,还可以引入机器学习特别是强化学习机制来进一步提升MPC的表现力。这种方法允许控制器自适应地调整自己的内部结构以便更好地应对未知挑战或是非标准工况下的任务完成度要求。比如在某些情况下可能无法获取足够的关于受控体的信息来做精准预报这时就可以借助RL算法让计算机自动探索最优解决方案而不是依赖人工预先指定好的模式[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值