結果

問題 No.411 昇順昇順ソート
ユーザー startcpp
提出日時 2016-08-12 23:22:55
言語 C++11
(gcc 13.3.0)
結果
AC  
実行時間 1,075 ms / 2,000 ms
コード長 1,322 bytes
コンパイル時間 578 ms
コンパイル使用メモリ 55,768 KB
実行使用メモリ 167,196 KB
最終ジャッジ日時 2024-11-07 15:49:26
合計ジャッジ時間 4,505 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

//
//使, 使, A[i] > A[i+1]
//DP, 0N-1
//(
#include <iostream>
using namespace std;
int n, k;
int dp[1 << 20][20][2];
int dfs(int rem, int last, int isReversed) {
if (rem == 0) return isReversed;
if (dp[rem][last][isReversed] != -1) return dp[rem][last][isReversed];
int ret = 0;
for (int i = 0; i < n; i++) { //
if ((rem >> i) % 2 == 0) continue; //使NG
if (isReversed) {
if (last > i) continue; //NG
ret += dfs(rem - (1 << i), i, isReversed);
}
else {
ret += dfs(rem - (1 << i), i, (last > i));
}
}
return (dp[rem][last][isReversed] = ret);
}
int main() {
cin >> n >> k;
k--; //0-indexed
for (int i = 0; i < (1 << n); i++) for (int j = 0; j < n; j++) for (int k = 0; k < 2; k++) dp[i][j][k] = -1;
cout << dfs((1 << n) - 1 - (1 << k), k, 0) << endl;
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0