Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Task : Segi Tiga
- Author : Phumipat C. [MAGCARI]
- Language: C++
- Created : 04 January 2023 [20:46]
- */
- #include<bits/stdc++.h>
- using namespace std;
- char a[260];
- int dp[260][260][3]; //0 1 2
- int res[3][3] = {2,1,0,2,1,1,1,2,1};
- int recur(int i,int j,int target){
- if(i == j){
- if(a[i]-'0' == target) return 1;
- else return -1;
- }
- if(dp[i][j][target] != 0) return dp[i][j][target];
- for(int k=i;k<j;k++){
- for(int x=0;x<=2;x++){
- for(int y=0;y<=2;y++){
- // อยากให้ทางซ้ายได้ค่าเป็น x
- // อยากให้ทางขวาได้ค่าเป็น y
- if(res[x][y] != target) continue;
- if(recur(i,k,x) == 1 && recur(k+1,j,y) == 1){
- return dp[i][j][target] = 1;
- }
- }
- }
- }
- return dp[i][j][target] = -1;
- }
- int main(){
- cin.tie(0)->sync_with_stdio(0);
- cin.exceptions(cin.failbit);
- int q=20;
- while(q--){
- int n;
- cin >> n >> a+1;
- memset(dp,0,sizeof dp);
- for(int sz=1;sz<=n;sz++){
- for(int i=1;i<=n-sz+1;i++){
- int j = sz + i - 1;
- for(int target=0;target<=2;target++){
- if(i == j){
- if(a[i]-'0' == target) dp[i][j][target] = 1;
- else dp[i][j][target] = -1;
- }else{
- for(int k=i;k<j;k++){
- for(int x=0;x<=2;x++){
- for(int y=0;y<=2;y++){
- if(res[x][y] != target) continue;
- if(dp[i][k][x] == 1 && dp[k+1][j][y] == 1){
- dp[i][j][target] = 1;
- goto alreadyTrue;
- }
- }
- }
- }
- }
- alreadyTrue:;
- }
- }
- }
- if(dp[1][n][0] == 1) cout << "yes\n";
- else cout << "no\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment