2 条题解
-
0
#include<bits/stdc++.h> using namespace std; char s[110]; int a[110], f[110][110]; int main() { scanf("%s", s+1); int len = strlen(s+1); memset(a, 0, sizeof(a)); for (int i=1; i<=len; i++) switch(s[i]) { case '(':a[i] = 1;break; case '[':a[i] = 2;break; case ']':a[i] = 3;break; case ')':a[i] = 4; } memset(f, 0, sizeof(f)); for (int i=1; i<=len; i++)f[i][i]=1; for (int l=2; l<=len; l++) { for (int i=1; i<=len-l+1; i++) { int j=l+i-1; f[i][j]=101;if(a[i] + a[j] == 5 && a[i] < a[j])f[i][j] = f[i+1][j-1]; for (int k=i; k < j; k++)f[i][j] = min(f[i][j], f[i][k] + f[k+1][j]); } } printf("%d", f[1][len]); return 0; } -
0
#include<bits/stdc++.h> using namespace std; char s[110]; int a[110],f[110][110]; int main() { scanf("%s",s+1); int len =strlen(s+1); memset(a,0,sizeof(a)); for (int i=1;i<=len;i++) switch(s[i]) { case '(':a[i] = 1;break; case '[':a[i] = 2;break; case ']':a[i] = 3;break; case ')':a[i] = 4; } memset(f,0,sizeof(f)); for (int i=1;i<=len;i++)f[i][i]=1; for (int l=2;l<=len;l++) { for (int i=1; i<=len-l+1;i++) { int j=l+i-1; f[i][j]=101;if(a[i]+a[j]==5 && a[i]<a[j])f[i][j]=f[i+1][j-1]; for (int k=i;k<j; k++)f[i][j]=min(f[i][j],f[i][k] + f[k+1][j]); } } printf("%d",f[1][len]); return 0; }
- 1
信息
- ID
- 1814
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 7
- 标签
- 递交数
- 15
- 已通过
- 8
- 上传者