本文主要是介绍Lightoj 1422(区间dp),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
链接:点击打开链接
题意:给你n天要穿的衣服的种类,可以套着别的种类的衣服穿,但一旦脱下就不会再穿,问n天要准备几件衣服
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int s[105],dp[105][105];
int main(){ //区间dpint t,m,i,j,k,l,n,cas;cas=1;scanf("%d",&t);while(t--){scanf("%d",&n);for(i=1;i<=n;i++)for(j=1;j<=n;j++)dp[i][j]=(i==j); //dp[i][j]代表从i到j需要几件服装for(i=1;i<=n;i++) //每个区间有两种可能,一种是不再scanf("%d",&s[i]); //传上一场的衣服,另一种是将上一for(l=2;l<=n;l++) //场的衣服保留下来for(i=1;i+l-1<=n;i++){dp[i][i+l-1]=dp[i][i+l-2]+1; //不需要上一场衣服则dp[i][j]=dp[i][j-1]+1;for(k=i;k<i+l-1;k++)if(s[k]==s[i+l-1]) //如果将第k场的衣服保留到第j场则dp[i][i+l-1]=min(dp[i][i+l-1],dp[i][k]+dp[k+1][i+l-2]);} //dp[i][j]=dp[i][k]+dp[k+1]j-1printf("Case %d: %d\n",cas++,dp[1][n]);}return 0;
}
这篇关于Lightoj 1422(区间dp)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!