题解 | #最大序列和#

最大序列和

https://www.nowcoder.com/practice/df219d60a7af4171a981ef56bd597f7b

#include "iostream"
#include "vector"
using namespace std;

// 思路:
// 从最后一个节点出发,不断计算局部最大值并将其保存至dp
// 具体思路:对比自身 & 自身+dp[i+1] 取最大值
// 举例分析:
// 如 1 5 -3 2 4
// dp的初始状态为 0 0 0 0 4 最后一个元素为起始状态
// 开始计算倒数第二个元素 2 的dp值:对比(2,2+dp[i+1])即(2,2+4)最大值为6,dp数组更新为 0 0 0 2 4 maxDp=4
// 倒数第三个 -3 max(-3,-3+6) dp:0 0 3 2 4 maxDp=4
// 倒数第四个 5 max(5,5+3) dp:0 8 3 2 4 maxDp=8
// 最后一个 1 max(1,1+8) dp:9 8 3 2 4 maxDp=9 结果为9
// 实现过程如下
int main() {
	int num;
	while (cin >> num) {
		// define:
		vector<long long int> dp(num);					// 预分配空间
		vector<int> input(num);
		// input:
		for (int i = 0; i < num; i++) cin >> input[i];	// 输入
		// dp:
		dp[num - 1] = input[num - 1];					// 起始状态:最后一个元素的dp一定等于自身
		long long int maxDp = dp[num - 1];				// 记录全局最大值
		for (int i = input.size() - 2; i >= 0; i--) {	// 从倒数第二个开始逆向计算
			long long int temp = input[i] + dp[i + 1];	// 自身+后一个元素的字串最大值(dp)
			dp[i] = temp > input[i] ? temp : input[i];	// 记录dp:对比自身 & 自身+dp[i+1] 取最大值
			maxDp = dp[i] > maxDp ? dp[i] : maxDp;		// 记录全局最大值
		}
		// output:
		cout << maxDp << endl;
	}
	return 0;
}

全部评论

相关推荐

行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务