[BOJ]1463:1
5719 ワード
💉質問内容
問題に答える
💉にゅうしゅつりょく
🧺入力
第1行は、1以上10以下の6乗の整数Nを与える.
🧺しゅつりょく
1行目の演算回数の最大値を出力します.
🔋サンプルI/O
🔮入力例12
🔮サンプル出力11
🔮入力例210
🔮サンプル出力23
💉もんだいぶんせき
🔋ぶんかつ
ダイナミックプログラミング(DP)
🔋難易度
シルバーIII
💉問題を解く
🔋解法
まず2からNまで繰り返し文を回した
最初のインデックスの値はゼロでなければならないからです.
また、次の条件を満たす必要があります.
まず、iインデックスの値はi-1インデックスの値1より大きくなければならない.
🧺入力
第1行は、1以上10以下の6乗の整数Nを与える.
🧺しゅつりょく
1行目の演算回数の最大値を出力します.
🔋サンプルI/O
🔮入力例1
2
🔮サンプル出力11
🔮入力例210
🔮サンプル出力23
💉もんだいぶんせき
🔋ぶんかつ
ダイナミックプログラミング(DP)
🔋難易度
シルバーIII
💉問題を解く
🔋解法
まず2からNまで繰り返し文を回した
最初のインデックスの値はゼロでなければならないからです.
また、次の条件を満たす必要があります.
まず、iインデックスの値はi-1インデックスの値1より大きくなければならない.
🔋解法
まず2からNまで繰り返し文を回した
最初のインデックスの値はゼロでなければならないからです.
また、次の条件を満たす必要があります.
まず、iインデックスの値はi-1インデックスの値1より大きくなければならない.
🔋ソースコード
#include <bits/stdc++.h>
constexpr int MAX = 10e6 + 1;
int adj[MAX];
void dp(int N) {
for (int i = 2; i <= N; ++i) {
adj[i] = adj[i - 1] + 1;
if (i % 3 == 0) adj[i] = std::min(adj[i], adj[i / 3] + 1);
if (i % 2 == 0) adj[i] = std::min(adj[i], adj[i / 2] + 1);
}
}
int main() {
int N;
std::cin >> N;
dp(N);
std::cout << adj[N];
}
最初はGRADYで解こうとしたが、時間は0.15秒だった.だから途中で作った時にDPに変えました
小条件四半期のため、2回間違えた.ううう
dpはもう少し練習する必要があります.銀色に戸惑う...
大会の問題は簡単でなければ少なくとも銀色I~金以上はあるだろう.
💉終了時..。
気になるところがあればコメントで質問しましょう~~
Reference
この問題について([BOJ]1463:1), 我々は、より多くの情報をここで見つけました
https://velog.io/@dpmawile/boj1463
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について([BOJ]1463:1), 我々は、より多くの情報をここで見つけました https://velog.io/@dpmawile/boj1463テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol