标签:scanf 相同 版本 区间dp cst names 其他 输出 algo
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cstdio> 5 using namespace std; 6 int n,tot,s[1001],color[1001],f[1001][1001]; 7 int main() 8 {int last,i,j,k,x; 9 //freopen("file.in","r",stdin); 10 scanf("%d",&n); 11 last=-1;tot=0; 12 for (i=1;i<=n;i++) 13 { 14 scanf("%d",&x); 15 if (x==last) 16 { 17 s[tot]++; 18 } 19 else 20 { 21 tot++; 22 s[tot]=1; 23 color[tot]=x; 24 last=x; 25 } 26 } 27 n=tot; 28 memset(f,127/3,sizeof(f)); 29 for (i=1;i<=n;i++) 30 if (s[i]>=2) 31 f[i][i]=1; 32 else f[i][i]=2; 33 for (i=1;i<=n-1;i++) 34 { 35 for (j=1;j<=n-i;j++) 36 { 37 for (k=j;k<=i+j-1;k++) 38 { 39 f[j][j+i]=min(f[j][j+i],f[j][k]+f[k+1][j+i]); 40 } 41 if (color[j]==color[j+i]) 42 { 43 f[j][j+i]=min(f[j][j+i],f[j+1][j+i-1]+(s[j]+s[j+i]>=3?0:1)); 44 } 45 46 } 47 } 48 cout<<f[1][n]; 49 }
标签:scanf 相同 版本 区间dp cst names 其他 输出 algo
原文地址:http://www.cnblogs.com/Y-E-T-I/p/7071704.html