区间DP lightoj 1422
t个样例
n n个数字
从 1->n 穿衣服 脱了就不能再用 ,可以套
问最少几件衣服
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 5 using namespace std; 6 #define MAXN 110 7 #define inf 100000000 8 9 int dp[MAXN][MAXN]; 10 int z[MAXN]; 11 12 int main() 13 { 14 int t,ca; 15 scanf("%d",&t); 16 ca=1; 17 18 while(t--) 19 { 20 int n; 21 int i,j,k,l; 22 memset(dp,0,sizeof(dp)); 23 scanf("%d",&n); 24 for(i=1;i<=n;i++) 25 { 26 scanf("%d",&z[i]); 27 dp[i][i]=1; //这个初始化肯定是对的 然后去取最小 28 } 29 30 for(l=2;l<=n;l++) 31 { 32 for(i=1;i<=n-l+1;i++) 33 { 34 j=i+l-1; 35 dp[i][j]=inf; 36 if(z[i]==z[j]) 37 dp[i][j]=min(dp[i][j-1],dp[i+1][j]); 38 for(k=i;k<j;k++) 39 if(z[i]==z[k]) 40 dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]); 41 } 42 } 43 printf("Case %d: %d\n",ca++,dp[1][n]); 44 } 45 return 0; 46 }
posted on 2016-11-17 15:39 HelloWorld!--By-MJY 阅读(175) 评论(0) 编辑 收藏 举报