[白俊]1328号高層ビル(c++)
[白俊]1328号高層ビル
質問リンク:https://www.acmicpc.net/problem/1328
問題とI/O
質問へのアクセス
どうしても思い出せないので、他人のブログを参考にしました.
従来のビルの数からビルの高さを一つ一つ上げると仮定します.そして、高いビルを置く場所を探せばいいです.一番左と一番右の場合はそれぞれ左から見て、右の場合はそれぞれ1を加えます.
両端の部分ではなく、見える数に変化はないので、置ける位置はi-2です.
点火式:dp[i][k]=cache[i-1][j-1][k]+cache[i][j][k-1]+cache[i-1][j][k]*(i-2)
コード実装(C++)
#include<iostream>
using namespace std;
typedef long long ll;
ll mod = 1e9 + 7;
ll cache[102][102][102];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int N, L, R;
cin >> N >> L >> R;
cache[1][1][1] = 1;
for(int i = 2 ; i <= N ; i++){
for(int j = 1 ; j <= L ; j++){
for(int k = 1 ; k <= R ; k++){
cache[i][j][k] = (cache[i-1][j-1][k] + cache[i-1][j][k-1] + cache[i-1][j][k] * (i-2)) % mod;
}
}
}
cout << cache[N][L][R] << "\n";
}
Reference
この問題について([白俊]1328号高層ビル(c++)), 我々は、より多くの情報をここで見つけました
https://velog.io/@kpg0518/백준-1328번-고층-빌딩c
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include<iostream>
using namespace std;
typedef long long ll;
ll mod = 1e9 + 7;
ll cache[102][102][102];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int N, L, R;
cin >> N >> L >> R;
cache[1][1][1] = 1;
for(int i = 2 ; i <= N ; i++){
for(int j = 1 ; j <= L ; j++){
for(int k = 1 ; k <= R ; k++){
cache[i][j][k] = (cache[i-1][j-1][k] + cache[i-1][j][k-1] + cache[i-1][j][k] * (i-2)) % mod;
}
}
}
cout << cache[N][L][R] << "\n";
}
Reference
この問題について([白俊]1328号高層ビル(c++)), 我々は、より多くの情報をここで見つけました https://velog.io/@kpg0518/백준-1328번-고층-빌딩cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol