2 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int MAXN = 105; int dp[MAXN][MAXN], a[MAXN], t, n; int main() { scanf("%d", &t); for (int cas = 1; cas <= t; cas++) { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } memset(dp, 0, sizeof(dp)); for (int i = 1; i <= n; i++) { dp[i][i] = 1; } for (int len = 2; len <= n; len++) { for (int i = 1; i + len - 1 <= n; i++) { int j = i + len - 1; dp[i][j] = dp[i][j-1] + 1; for (int k = i; k < j; k++) { if (a[k] == a[j]) { dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j-1]); } } } } printf("Case %d: %d\n", cas, dp[1][n]); } return 0; }
-
0
#include<bits/stdc++.h> using namespace std; int dp[105][105],a[105],T,n; int main(){ cin>>T; for(int ncase=1;ncase<=T;ncase++) { cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++){ dp[i][i]=1; } for(int len=2;len<=n;len++){ for (int i=1;i+len-1<=n;i++) { int j=i+len-1; dp[i][j]=dp[i][j-1]+1; for(int k=i;k<j;k++) { if(a[k]==a[j]){ dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j-1]); } } } } cout<<"Case "<<ncase<<": "<<dp[1][n]<<endl; } return 0; }
- 1
信息
- ID
- 2799
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 87
- 已通过
- 18
- 上传者