BOJ-11058キーボード(C++)

5741 ワード

質問元:https://www.acmicpc.net/problem/11058

問題の難易度


Silver 1

問題の処理方法


1番以外は2~3番がセットで、4番の時に元のバッファに追加できます.
1)ボタンを押す前のA個数+1
2)十分であれば、4回押す前に2,3回、3回押す前にA個をx 2個とすることができます->ウィンドウ全体のA個をコピーするので、もう一度4回押して追加します.
3)2、3、4回クリック前の画面Aの数をコピーして2回ペーストすると、2、3、4、4回クリック前の(i-4)のペーストは2回で、画面のAは3回→i-4×3個繰り返すことができる
4)2、3、4、4、4ボタン前(i-5)を押すと、貼り付けは3回->i-5 x 4個となります
注意:long longデータ型を使用する必要があります

パスコード

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#define INF 987654321
#define MAX 1000001

using namespace std;

long long dp[101];

int main() {
	int N;
	cin >> N;
	dp[1] = 1;
	dp[2] = 2;
	dp[3] = 3;
	dp[4] = 4;
	dp[5] = 5;
	dp[6] = 6;

	for (int i = 7; i <= N; i++) {
		dp[i] = max({dp[i-1]+1, dp[i-3]*2, dp[i-4]*3,dp[i-5]*4});
	}
	cout << dp[N];
	
	return 0;
}

フィードバック


maxアルゴリズム関数に{}を置いて複数のパラメータを比較できることを初めて知りました!違う時にも使えます