文章

10

粉丝

0

获赞

18

访问

537

头像
最大序列和 题解:dp
P1172 清华大学/兰州大学机试题
发布于2026年2月23日 11:18
阅读数 30

#include <vector>
#include <cstdio>
#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
	int N;
	while(cin>>N)
	{
		  vector<long long> nums(N); // 使用 long long 防止溢出
        for (int i = 0; i < N; i++) {
            cin >> nums[i];
        }

        // 边界情况处理
        if (N == 0) {
            cout << 0 << endl;
            continue;
        }

        long long max_sum = nums[0];   // 全局最大和
        long long current_sum = nums[0]; // 以当前元素结尾的最大和 (即 dp[i])

        for (int i = 1; i < N; i++) {
            // 状态转移方程: dp[i] = max(nums[i], dp[i-1] + nums[i])
            current_sum = max(nums[i], current_sum + nums[i]);
            
            // 更新全局最大值
            max_sum = max(max_sum, current_sum);
        }

        cout << max_sum << endl;
	}
return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发