白準2096号:下りて
下へ
白準2096号:下りて
アイデア
dpテーブルに現在位置の数値+以前に選択可能な数値のうち最大(小)の値を格納します.
コード#コード#
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
short arr[n+1][3] = {};
int dp[n+1][3] = {};
for (int i = 1; i <= n; i++) {
cin >> arr[i][0] >> arr[i][1] >> arr[i][2];
dp[i][0] = max(dp[i-1][0], dp[i-1][1]) + arr[i][0];
dp[i][1] = max(max(dp[i-1][0], dp[i-1][1]), dp[i-1][2]) + arr[i][1];
dp[i][2] = max(dp[i-1][1], dp[i-1][2]) + arr[i][2];
}
int max_ans = 0;
for (int i = 0; i < 3; i++) {
max_ans = max(max_ans, dp[n][i]);
}
fill(&dp[1][0], &dp[n][2]+1, INT_MAX);
for (int i = 1; i <= n; i++) {
dp[i][0] = min(dp[i-1][0], dp[i-1][1]) + arr[i][0];
dp[i][1] = min(min(dp[i-1][0], dp[i-1][1]), dp[i-1][2]) + arr[i][1];
dp[i][2] = min(dp[i-1][1], dp[i-1][2]) + arr[i][2];
}
int min_ans = INT_MAX;
for (int i = 0; i < 3; i++) {
min_ans = min(min_ans, dp[n][i]);
}
cout << max_ans << ' ' << min_ans;
return 0;
}
おしゃべり
メモリ制限は4 MBです.dpテーブルを再使用し、入力した数字は短いです.危うく通過するところだった.
Reference
この問題について(白準2096号:下りて), 我々は、より多くの情報をここで見つけました
https://velog.io/@ks1ksi/백준-2096번-내려가기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
short arr[n+1][3] = {};
int dp[n+1][3] = {};
for (int i = 1; i <= n; i++) {
cin >> arr[i][0] >> arr[i][1] >> arr[i][2];
dp[i][0] = max(dp[i-1][0], dp[i-1][1]) + arr[i][0];
dp[i][1] = max(max(dp[i-1][0], dp[i-1][1]), dp[i-1][2]) + arr[i][1];
dp[i][2] = max(dp[i-1][1], dp[i-1][2]) + arr[i][2];
}
int max_ans = 0;
for (int i = 0; i < 3; i++) {
max_ans = max(max_ans, dp[n][i]);
}
fill(&dp[1][0], &dp[n][2]+1, INT_MAX);
for (int i = 1; i <= n; i++) {
dp[i][0] = min(dp[i-1][0], dp[i-1][1]) + arr[i][0];
dp[i][1] = min(min(dp[i-1][0], dp[i-1][1]), dp[i-1][2]) + arr[i][1];
dp[i][2] = min(dp[i-1][1], dp[i-1][2]) + arr[i][2];
}
int min_ans = INT_MAX;
for (int i = 0; i < 3; i++) {
min_ans = min(min_ans, dp[n][i]);
}
cout << max_ans << ' ' << min_ans;
return 0;
}
Reference
この問題について(白準2096号:下りて), 我々は、より多くの情報をここで見つけました https://velog.io/@ks1ksi/백준-2096번-내려가기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol