Lightoj_1422

题目:

求最小要多少件衣服

思路

初始化dp[i][i] = 1;

枚举长度{枚举开头{if(a[j] == a[L] 继承dp[j][L - 1]); dp[j][L]取min forever}};

ACcode 

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>

using namespace std;
const int inf = 0x3f3f3f3f;

int t,n;
int dp[105][105],a[105];

int main()
{
	scanf("%d",&t);
	for(int T = 1;T <= t; T++){
		scanf("%d",&n);
		for(int i = 1;i <= n; i++) scanf("%d",&a[i]);
		for(int i = 1;i <= n; i++){
			for(int j = 1;j <= n; j++){
				dp[i][j] = inf;
				if(i == j) dp[i][j] = 1;
			}
		}
		for(int i = 2;i <= n; i++){//枚举长度
			for(int j = 1;j + i - 1 <= n; j++){//枚举开头
				int L = j + i - 1;
				if(a[j] == a[L]) dp[j][L] = dp[j][L - 1];
				for(int f = j;f < L; f++){
					dp[j][L] = min(dp[j][L],dp[j][f] + dp[f + 1][L]);
				}
			}
		}
		printf("Case %d: %d\n",T,dp[1][n]);
	}
}
发布了31 篇原创文章 · 获赞 5 · 访问量 1369

猜你喜欢

转载自blog.csdn.net/qq_43685900/article/details/102769288