想了20min然后写了10min qwq
直接把思考过程挂上来了,应该能看懂吧/wq
(删去了大部分错误的过程,然后才发现正确的就这么点/kk
然而又没能一次过。查了很久发现是第三层循环那里把 i 打成了 1 。果然又是低级错误呜呜呜
#include<bits/stdc++.h> using namespace std; int n,f[101][101]; char s[101]; int main() { while(scanf("%s",s+1)!=EOF) { n=strlen(s+1); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { f[i][j]=2e9; } } for(int i=1;i<=n;i++) f[i][i]=1;//长度为1的区间值为1 for(int l=2;l<=n;l++) { for(int i=1;i<=n-l+1;i++) { int j=i+l-1; for(int k=i;k<j;k++)//emmm就是这里第一次的时候打错了( { f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]); } if(s[i]==s[j]) f[i][j]--;//如果两端是一样的那就可以少涂一次 } } cout<<f[1][n]<<endl; } return 0; }