【正经题解】闯关游戏
2024-03-15 10:50:01
发布于:浙江
30阅读
0回复
0点赞
通过结构体 Pillar 封装柱子的高度和分数,使用数组保存输入的柱子信息,并在遍历过程中使用动态规划进行计算
#include<bits/stdc++.h>
using namespace std;
// 定义柱子的高度和分数的结构体
struct Pillar {
int height;
int score;
};
int main() {
// 输入柱子的个数和高度差范围
long long n, m;
cin >> n >> m;
// 定义柱子的高度数组和分数数组
int h[200010], s[200010];
// 输入每个柱子的高度和分数
for(int i = 1; i <= n; i++){
cin >> h[i] >> s[i];
}
// 初始化动态规划数组和记录每个高度对应最大分数的数组
long long dp[200010], tong[1000010];
// 初始化最大分数和总分数
long long ans = 0, totalScore = 0;
// 遍历每个柱子
for(int i = 1; i <= n; i++){
long long maxx = 0; // 找出对应高度能获得的最大分数
// 遍历当前柱子高度范围内的所有可能高度
for(int j = max((long long)0, h[i] - m); j <= h[i] + m; j++){
maxx = max(tong[j], maxx);
}
// 计算当前柱子的最大分数并更新动态规划数组
dp[i] = maxx + s[i];
// 更新当前柱子高度对应的最大分数
tong[h[i]] = max(tong[h[i]], dp[i]);
// 更新总分数
totalScore = max(totalScore, dp[i]);
}
// 输出总分数
cout << totalScore << endl;
return 0;
}
这里空空如也
有帮助,赞一个