More actions
(1) |
(Repair pages found by live-compare batch 0001) |
||
| Line 12: | Line 12: | ||
using namespace std; | using namespace std; | ||
int dp | int dp[14*14][1<<15] = { 0, }; | ||
int n, m; | int n, m; | ||
int search(int num, int bitma){ | int search(int num, int bitma){ | ||
if(dp | if(dp[num][bitma]){ | ||
if(dp | if(dp[num][bitma] == -1){ | ||
return 0; | return 0; | ||
} | } | ||
return dp | return dp[num][bitma]; | ||
} | } | ||
if(num == n * m - 1){ | if(num == n * m - 1){ | ||
| Line 25: | Line 25: | ||
return bitma; | return bitma; | ||
} | } | ||
dp | dp[num][bitma] = -1; | ||
return 0; | return 0; | ||
} | } | ||
if(bitma & 1){ | if(bitma & 1){ | ||
dp | dp[num][bitma] = search(num + 1, bitma >> 1) % 9901; | ||
if(dp | if(dp[num][bitma]){ | ||
return dp | return dp[num][bitma]; | ||
} | } | ||
dp | dp[num][bitma] = -1; | ||
return 0; | return 0; | ||
} | } | ||
if( num % m != m - 1 && !((bitma >> 1) & 1)){ | if( num % m != m - 1 && !((bitma >> 1) & 1)){ | ||
dp | dp[num][bitma] = search(num + 1, (bitma >> 1) + 1) % 9901; | ||
} | } | ||
if( num < (n-1) * m){ | if( num < (n-1) * m){ | ||
dp | dp[num][bitma] = (dp[num][bitma] + search(num + 1, (bitma >> 1) + (1<<(m-1)))) % 9901; | ||
} | } | ||
if(dp | if(dp[num][bitma]){ | ||
return dp | return dp[num][bitma]; | ||
} | } | ||
dp | dp[num][bitma] = -1; | ||
return 0; | return 0; | ||
} | } | ||
| Line 59: | Line 59: | ||
#include <cstring> | #include <cstring> | ||
int d | int d[14 * 14][1 << 14]; | ||
int n, m; | int n, m; | ||
| Line 67: | Line 67: | ||
return 0; | return 0; | ||
} | } | ||
if (d | if (d[t][s] >= 0) return d[t][s] % 9901; | ||
int& res = d | int& res = d[t][s]; | ||
if (s % 2 == 1) res=go(t + 1, s >> 1); | if (s % 2 == 1) res=go(t + 1, s >> 1); | ||
else { | else { | ||
| Line 95: | Line 95: | ||
== 곽정흠 == | == 곽정흠 == | ||
Latest revision as of 14:46, 26 March 2026
오늘의 문제
코드
15이원준
#include<iostream>
using namespace std;
int dp[14*14][1<<15] = { 0, };
int n, m;
int search(int num, int bitma){
if(dp[num][bitma]){
if(dp[num][bitma] == -1){
return 0;
}
return dp[num][bitma];
}
if(num == n * m - 1){
if(bitma){
return bitma;
}
dp[num][bitma] = -1;
return 0;
}
if(bitma & 1){
dp[num][bitma] = search(num + 1, bitma >> 1) % 9901;
if(dp[num][bitma]){
return dp[num][bitma];
}
dp[num][bitma] = -1;
return 0;
}
if( num % m != m - 1 && !((bitma >> 1) & 1)){
dp[num][bitma] = search(num + 1, (bitma >> 1) + 1) % 9901;
}
if( num < (n-1) * m){
dp[num][bitma] = (dp[num][bitma] + search(num + 1, (bitma >> 1) + (1<<(m-1)))) % 9901;
}
if(dp[num][bitma]){
return dp[num][bitma];
}
dp[num][bitma] = -1;
return 0;
}
int main(){
cin>> n >> m;
cout << search(0, 0);
}
박인서
#include <iostream>
#include <cstring>
int d[14 * 14][1 << 14];
int n, m;
int go(int t, int s) {
if (t >= n*m) {
if(t == n*m && s == 0) return 1;
return 0;
}
if (d[t][s] >= 0) return d[t][s] % 9901;
int& res = d[t][s];
if (s % 2 == 1) res=go(t + 1, s >> 1);
else {
res = go(t + 1, (s >> 1) | (1 << m - 1));
if (s % 4 == 0 && t%m != (m - 1)) res+=go(t + 2, s >> 2);
}
return res % 9901;
}
int main() {
std::cin >> n >> m;
memset(d, -1, sizeof(d));
std::cout << go(0, 0);
return 0;
}
곽정흠
아이디어
15이원준
박인서
- 비트마스크를 이용한 DP