Loj2687,jzoj3320-文本编辑器【线头dp】
正題
題目鏈接:https://loj.ac/problem/2687
題目大意
三個操作:
然后fff操作不能對字符eee使用,然后求最少操作次數刪除所有的eee。
解題思路
線頭dpdpdp。
設fi,jf_{i,j}fi,j?表示越過iii一次,然后fff操作是到jjj字符的最小操作次數。
gi,j,kg_{i,j,k}gi,j,k?表示越過iii三次,然后在到iii之前的fff操作到jjj字符,在iii之后的fff操作到kkk字符的最小操作次數。
然后動態轉移:
fi,j={fi?1,j(j!=si,!needi)fi?1,si+2gi?1,si,j(j!=si)gi?1,si,si+2f_{i,j}=\left\{\begin{matrix} f_{i-1,j}(j!=s_i,!need_i) \\ f_{i-1,s_i}+2 \\ g_{i-1,s_i,j}(j!=s_i) \\ g_{i-1,s_i,s_i}+2 \\\end{matrix}\right.fi,j?=????????fi?1,j?(j!=si?,!needi?)fi?1,si??+2gi?1,si?,j?(j!=si?)gi?1,si?,si??+2?
gi,j,k={fi?1,j+3(j!=si)fi?1,si+5gi?1,j,k+1(j,k!=si)gi?1,j,si+3(j!=si)gi?1,si,k+3(k!=si)gi?1,si,si+5g_{i,j,k}=\left\{\begin{matrix} f_{i-1,j}+3(j!=s_i) \\ f_{i-1,s_i}+5 \\ g_{i-1,j,k}+1(j,k!=s_i) \\ g_{i-1,j,s_i}+3(j!=s_i) \\ g_{i-1,s_i,k}+3(k!=s_i) \\ g_{i-1,s_i,s_i}+5 \end{matrix}\right.gi,j,k?=????????????????fi?1,j?+3(j!=si?)fi?1,si??+5gi?1,j,k?+1(j,k!=si?)gi?1,j,si??+3(j!=si?)gi?1,si?,k?+3(k!=si?)gi?1,si?,si??+5?
詳細的的看這篇dalaoの題解\texttt{dalaoの題解}dalaoの題解<?pleasecheckthere<-please\ check\ there<?please?check?there
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=70100; int n,m,ans,s[N],must[N],f[N][11],need=1,g[N][11][11]; void get_min(int &x,int y) {if(y<x) x=y;} int main() {scanf("%d\n",&n);for(int i=1;i<=n;i++){char c;scanf("%c",&c);if(c=='e')ans+=(need=1)*2;else{s[++m]=c-'a';must[m]=need;need=0;}}memset(f,0x3f,sizeof(f));memset(g,0x3f,sizeof(g));f[0][s[1]]=0;for(int i=1;i<=m;i++){for(int j=0;j<11;j++){if(!must[i]&&j!=s[i])get_min(f[i][j],f[i-1][j]);get_min(f[i][j],f[i-1][s[i]]+2);if(j!=s[i])get_min(f[i][j],g[i-1][s[i]][j]);get_min(f[i][j],g[i-1][s[i]][s[i]]+2);for(int k=0;k<11;k++){if(j!=s[i])get_min(g[i][j][k],f[i-1][j]+3);get_min(g[i][j][k],f[i-1][s[i]]+5);if(j!=s[i]&&k!=s[i])get_min(g[i][j][k],g[i-1][j][k]+1);if(j!=s[i])get_min(g[i][j][k],g[i-1][j][s[i]]+3);if(k!=s[i])get_min(g[i][j][k],g[i-1][s[i]][k]+3);get_min(g[i][j][k],g[i-1][s[i]][s[i]]+5);}}}printf("%d",f[m][10]+ans-2); } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Loj2687,jzoj3320-文本编辑器【线头dp】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jzoj3319-[BOI2013]雪地
- 下一篇: 现在买电脑选什么配置(现在什么电脑配置)