2018.10.23 hdu2476String painter(区间dp)

xiaoxiao2022-06-12  89

传送门 一道挺妙的区间dp.


我们先用区间dp求出第一个串为空串时的最小代价。 然后再加入原本的字符更新答案就行了。 代码:

#include<bits/stdc++.h> using namespace std; char s[105],t[105]; int n,ans[105],f[105][105]; inline int dfs(int l,int r){ if(~f[l][r])return f[l][r]; if(l==r)return f[l][r]=1; f[l][r]=0x3f3f3f3f; for(int mid=l;mid<r;++mid)f[l][r]=min(f[l][r],dfs(l,mid)+dfs(mid+1,r)); if(t[l]==t[r])f[l][r]=min(f[l][r],dfs(l+1,r)); return f[l][r]; } int main(){ while(~scanf("%s%s",s+1,t+1)){ n=strlen(s+1); memset(f,-1,sizeof(f)); for(int i=1;i<=n;++i){ ans[i]=dfs(1,i); for(int j=1;j<i;++j)ans[i]=min(ans[i],ans[j]+dfs(j+1,i)); if(s[i]==t[i])ans[i]=min(ans[i],ans[i-1]); } cout<<ans[n]<<'\n'; } return 0; }
转载请注明原文地址: https://www.6miu.com/read-4932224.html

最新回复(0)