【BZOJ】1260 [CQOI2007]涂色paint(区间dp)
题目
传送门:QWQ
分析
区间dp, 详见代码
代码
/************************************************************** Problem: 1260 User: noble_ Language: C++ Result: Accepted Time:0 ms Memory:1328 kb ****************************************************************/ #include <bits/stdc++.h> using namespace std; char s[100]; int dp[100][100]; int main() { for(int i=0;i<100;i++) for(int j=0;j<100;j++) dp[i][j]=1<<25; scanf("%s",s+1); int n=strlen(s+1); for(int i=1;i<=n;i++) dp[i][i]=1; for(int l=2;l<=n;l++) for(int i=1;i+l-1<=n;i++) { int j=i+l-1; if(s[i]==s[j]) { if(l==2) dp[i][j]=1; else { dp[i][j]=min(dp[i+1][j],dp[i][j-1]); dp[i][j]=min(dp[i][j],dp[i+1][j-1]+1); } } else for(int k=i;k<=j;k++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]); } printf("%d",dp[1][n]); return 0; }