「一本通 1.1 练习 2」数列分段
一、题目
题目链接:数列分段
二、解题思路
虽然题目标注的是贪心,但是,我觉得,用动态规划可能会更简单一点。
【数学建模】
令dp[i]代表从1开始到第i个结束最少要分成的段数。
n=5,m=6。
A数组 | 下标 | dp数组 |
---|---|---|
4 | 1 | 1 |
2 | 2 | 1 |
4 | 3 | 2 |
5 | 4 | 3 |
1 | 5 | 3 |
ans=dp[n]=3
【状态方程】
如果sum+A[i]<=m,则dp[i]=sp[i-1];sum+=A[i];
否则,dp[i]=dp[i-1]+1;sum=A[i];
sum是记录字段和的变量。
【边界(初始化)】
因为第一个一定要被切成1段,所以,dp[1]=1;
因为sum记录字段和,则第一段的一开始的和一定是A[1];
三、代码
#include<iostream>
#include<cstdio>
using