codeforces288 E. Arthur and Brackets
2015-01-30 11:32
417 查看
题意:有n对括号,从左到右给出每对括号的长度区间,判断是否存在满足条件的合法序列并输出。
分析:dp,想到了感觉好容易,dp[i][j]表示i-j对括号形成一个合法序列,它可由以下情况递推出来,i+1-j形成合法序列并且第i对括号扩在i+1-j外;第i-k对括号和k+1-j对括号都形成合法序列,最后dfs输出就ok了。做dp要多独立思考啊。
分析:dp,想到了感觉好容易,dp[i][j]表示i-j对括号形成一个合法序列,它可由以下情况递推出来,i+1-j形成合法序列并且第i对括号扩在i+1-j外;第i-k对括号和k+1-j对括号都形成合法序列,最后dfs输出就ok了。做dp要多独立思考啊。
#include<iostream> #include<string> #include<cstring> #include<cstdio> #include<cmath> #include<iomanip> #include<map> #include<algorithm> #include<queue> #include<set> #define inf 10000000 #define pi acos(-1.0) #define eps 1e-8 #define seed 131 using namespace std; typedef pair<int,int> pii; typedef unsigned long long ULL; typedef long long LL; const int maxn=100005; int n; int dis[605][2]; int dp[605][605]; int pre[605][605]; void print(int a,int b) { if(a==b){ printf("()"); return; } if(dp[a][b]==2){ printf("("); print(a+1,b); printf(")"); } else if(dp[a][b]==1){ print(a,pre[a][b]); print(pre[a][b]+1,b); } } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&dis[i][0],&dis[i][1]); memset(dp,-1,sizeof(dp)); memset(pre,-1,sizeof(pre)); for(int i=1;i<=n;i++){ if(1>=dis[i][0]&&1<=dis[i][1]){ dp[i][i]=1; pre[i][i]=i; } } for(int len=2;len<=n;len++){ for(int i=1;i+len-1<=n;i++){ int j=i+len-1; if(dp[i+1][j]>=0&&(j-i)*2>=dis[i][0]-1&&(j-i)*2<=dis[i][1]-1) { dp[i][j]=2; pre[i][j]=0; continue; } for(int k=i;k<=j;k++){ if(dp[i][k]>=0&&dp[k+1][j]>=0) { dp[i][j]=1; pre[i][j]=k; break; } } } } if(dp[1] ==-1) printf("IMPOSSIBLE\n"); else print(1,n); return 0; }
相关文章推荐
- Arthur and Brackets - CodeForces 508 E dp贪心
- codeforces 508 E. Arthur and Brackets
- codeforces 508 E. Arthur and Brackets
- 【35.29%】【codeforces 557C】Arthur and Table
- CodeForces-380C:Sereja and Brackets(线段树与括号序列)
- Problem - 557C - Codeforces - Arthur and Table
- codeforces 552 E. Vanya and Brackets
- 【Henu ACM Round#20 F】 Arthur and Brackets
- Arthur and Walls - CodeForces 525 D 搜索
- Codeforces Round #288 (Div. 2) E. Arthur and Brackets [dp 贪心]
- Codeforces 380 C. Sereja and Brackets
- 【23.24%】【codeforces 629C】Famil Door and Brackets
- Codeforces Round #288 (Div. 2) E. Arthur and Brackets 贪心 区间dp
- Codeforces 380C. Sereja and Brackets【线段树】
- Codeforces--525D--Arthur and Walls(DFS)
- CodeForces-629C-Famil Door and Brackets
- 【39.29%】【codeforces 552E】Vanya and Brackets
- CodeForces Round #288 Div.2. E-Arthur and Brackets——dp/greedy
- Codeforces Round #288 (Div. 2)E. Arthur and Brackets
- 【CodeForces 525D】【dfs+思维】 Arthur and Walls 【只包含点和星的矩阵,需要将部分星变成点使点能组成矩形 】