Skip to content

Commit 0abdff1

Browse files
authored
[20250220] SWEA / D4 / 동아리실 관리하기 / 설진영
1 parent ac2f364 commit 0abdff1

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
```java
2+
import java.io.*;
3+
4+
public class Solution {
5+
public static void main(String[] args) throws IOException {
6+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
8+
int testCases = Integer.parseInt(br.readLine());
9+
for (int tc = 1; tc <= testCases; tc++) {
10+
String sequence = br.readLine();
11+
System.out.println("#" + tc + " " + solve(sequence, sequence.length()));
12+
}
13+
}
14+
15+
private static int solve(String sequence, int length) {
16+
int[][] dp = new int[16][length];
17+
final int MOD = 1_000_000_007;
18+
19+
int firstState = (1 << (sequence.charAt(0) - 'A')) | 1;
20+
for (int state = 1; state <= 15; state++) {
21+
if ((state & firstState) == firstState) {
22+
dp[state][0] = 1;
23+
}
24+
}
25+
26+
for (int pos = 1; pos < length; pos++) {
27+
int currentPerson = 1 << (sequence.charAt(pos) - 'A');
28+
for (int currState = 1; currState <= 15; currState++) {
29+
if ((currState & currentPerson) == currentPerson) {
30+
for (int prevState = 1; prevState <= 15; prevState++) {
31+
if (dp[prevState][pos-1] > 0 && ((currState & prevState) > 0)) {
32+
dp[currState][pos] = (dp[currState][pos] + dp[prevState][pos-1]) % MOD;
33+
}
34+
}
35+
}
36+
}
37+
}
38+
39+
int result = 0;
40+
for (int state = 1; state <= 15; state++) {
41+
result = (result + dp[state][length-1]) % MOD;
42+
}
43+
return result;
44+
}
45+
}
46+
```

0 commit comments

Comments
 (0)