文章
18
粉丝
183
获赞
57
访问
101.8k
这题归于动态规划,但是我之前怎么看都觉得是贪心
今天想通了,可以从两种不同的角度来看:
设dp[i]是以下标为i的元素为结尾的序列 的最大合值
dp[i]=max( dp[i-1]+list[i] , list[i] );
if (dp[i-1]<0) dp[i]=list[i];
else dp[i]=dp[i-1]+list[i];
两种方法的代码实际上是一样的,只是说换个不同的写法,理解起来就方便很多了。
以下几点需要注意:
代码如下:
#include <bits/stdc++.h>
using namespace std;
#define MIN 0xc0c0c0c0; //无穷小
int main()
{
int n;
while (cin >> n)
{
long long int list[n];
//输入
for (int i = 0; i < n; i++)
{
cin >> list[i];
}
//求解
long long int dp[n];
dp...
登录后发布评论
暂无评论,来抢沙发