钢条分割

就是最基本的DP思想了 

不理解的多刷几次导弹拦截类似的线性DP

 /*
 qq:1239198605
 ctgu_yyf
        */

#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
int dp[1005],arr[1005],v[1005];
int main()
{
   ios::sync_with_stdio(false);
   int N,n;
   cin>>N>>n;
   
   memset(dp,0,sizeof(dp));
   
   for(int i=1;i<=N;i++)
   cin>>arr[i];
   for(int i=1;i<=N;i++)
   cin>>v[i];
   
  
   
   for(int i=1;i<=n;i++)
   {
   int pro=0;  
   for(int j=1;j<=i;j++)
   { 	
   	pro=max(pro,dp[i-j]+v[j]);
   }
   dp[i]=pro;
   }
   
 //  for(int i=0;i<=N;i++)
 //  cout<<dp[i]<<" ";
   
 //  cout<<endl;

   cout<<dp[n]<<endl;


return 0;
}

 

### 问题定义 钢条切割问题是一个经典的动态规划问题,旨在寻找一种最优的切割方式,使得给定长度的钢条能够通过切割为若干段后,销售获得的最大收益。具体来说,假设钢条的长度为 $n$ 米,并且给定一个价格表 $p(i)$,其中 $p(i)$ 表示长度为 $i$ 的钢条的价格。目标是找到一种切割方案,使得总收益 $r(n)$ 最大化。切割钢条长度必须为整数,且不允许有剩余未切割的部分 [^3]。 动态规划通过将问题分解为子问题并存储子问题的解来避免重复计算,从而显著优化了时间复杂度。例如,可以通过自底向上的动态规划方法,构建一个数组 $dp$,其中 $dp[i]$ 表示长度为 $i$ 的钢条的最大收益。状态转移方程为: $$ dp[i] = \max_{1 \leq j \leq i} (p[j] + dp[i-j]) $$ 通过这种方式,逐步填充数组 $dp$,最终求得长度为 $n$ 的钢条的最大收益 [^4]。 以下是动态规划的 Python 实现示例: ```python def cut_rod(p, n): dp = [0] * (n + 1) # 初始化动态规划数组 for i in range(1, n + 1): max_val = -float('inf') for j in range(1, i + 1): max_val = max(max_val, p[j] + dp[i - j]) # 计算当前长度的最优解 dp[i] = max_val return dp[n] # 返回长度为n的钢条的最优解 ``` 在该代码中,`p` 是价格数组,`p[j]` 表示长度为 `j` 的钢条的价格,`n` 是钢条的总长度。算法通过动态规划数组 `dp`,逐步计算出每个长度的最优解,并最终求解出长度为 `n` 的钢条的最优解 [^4]。 ### 应用场景 钢条切割问题不仅是动态规划教学中的经典案例,也在实际工业生产中具有广泛应用。例如,在金属加工业中,如何通过切割原材料(如钢板、钢管等)以减少浪费并最大化销售利润,是典型的资源优化问题。该问题的解决方案可以帮助企业优化生产计划,提高资源利用率,从而增加收益 [^2]。 此外,钢条切割问题的思想还可以扩展到其他资源分配和优化问题中,例如: - **木材加工**:如何切割原木以生产特定长度的木板,最大化销售利润。 - **布料裁剪**:如何裁剪布料以生产特定尺寸的服装,减少浪费。 - **物流规划**:如何将货物分割运输,以最小化运输成本。 这些问题的核心思想与钢条切割问题一致,即通过合理的切割或分配策略,实现资源的最优利用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值