首页 > 其他分享 >uva 10453

uva 10453

时间:2022-10-30 12:57:05浏览次数:65  
标签:return int 10453 ans print uva

将字符串变为回文串最少需要几次操作(在任意位置插入字符),并输出变化后的回文串


f[l][r] = f[l+1][r-1] // a[i]==a[j]
    =min(f[l+1][r],f[l][r-1])

#include <iostream>
#include <cstring>
using namespace std;
 const int N=1e3+4;
 string s;
 int f[N][N];
 string ans;
 
 void print(int l,int r){
     if(l>r) return;
     if(l==r){
         ans+=s[l]; return;
     }
     if(s[l]==s[r]){
         ans+=s[l]; print(l+1,r-1); ans+=s[l]; return;
     }
    if(f[l][r]==f[l+1][r]+1){
        ans+=s[l]; print(l+1,r); ans+=s[l];
    }
    else{
        ans+=s[r]; print(l,r-1); ans+=s[r]; 
    }
 }
 void solve(){
     int i,j;
     memset(f,0,sizeof f);
     int n=s.length()-1;
     
     for(i=n;i>0;i--) 
      for(j=i;j<=n;j++)
      if(s[i]==s[j]) f[i][j]=f[i+1][j-1];
      else f[i][j]=min(f[i][j-1],f[i+1][j])+1;
      
    cout<<f[1][n]<<' '; 
    ans=""; print(1,n); cout<<ans; 
    cout<<endl;
 }
 signed main(){

     while(cin>>s){
         s="0"+s; solve();
     }
 }
 
 

 

 

标签:return,int,10453,ans,print,uva
From: https://www.cnblogs.com/towboa/p/16841037.html

相关文章

  • uva 10163
    n个仓库,安排m个人看守,每个仓库只由一个人看守,每个人对应a[i],表示能量(薪水)如果某个人看守k个仓库,每个仓库能量值a[i]/k求仓库能量最小值最大时,所支付薪水最少值  ......
  • uva 1291
    游戏者必须按照这个序列一次用某一只脚踩相应的踏板。在任何时候,两只脚不能在同一个踏板上,但可以同时在中心位置0。每一个时刻,HH必须移动他的一只脚去踩相应的箭头,另一只脚......
  • uva 11795
      题目意思还是有点绕的,想了好一会大体上是一个状压dp(废话 f[j],当当前拥有武器集合为j时,消灭所有怪物的方案数像线性dp一样,但可以去掉一维 f[j]+=f[t],t=j^(1......
  • uva 1456
    比如,手机可能位于 5 个区域中,概率分别为 0.3,0.05,0.1,0.3,0.25,则一种方法是先同时访问 \{c1,c2,c3\},再同时访问 {c_4,c_5},访问区域数量的期望为  3*(0.3+0.05......
  • uva11404
    删去字符串S中的一些字符,使剩下的字符组成最长的回文串(顺序连接) 区间dpf[i][j] f[i][j]=f[i+1][j-1]  i==j =min(f[i+1][j],f[i][j-1]) #include......
  • uva 11552
    给你一个长度 k ,一个字符串 S(都为小写字母),保证 S 的长度为 k的整数倍。将 S 按顺序分为 S/k 组,组内字符可以重新排列问最少有几个块?(如fff,ww) 枚举开头......
  • uva 10534
    给一个序列A,求一个最长子序列,长度为2k+1满足前k+1个数递增,后k个递减  LIS板子题,正反各求一次,枚举中间的交点 #include<iostream>#include<cstring>#include<al......
  • uva 1424
    给定一个长度为 n1​ ( n1​≤100 )的点的无向连通图和一个长度为 n 的序列 A ( n≤200 ),1<=A[i]<=n1希望修改尽量少的数,使得序列的任意相邻两个数在图上是是......
  • uva 11584
    给一个字符串,划分成最少的回文串如aaadbccb---->aadbccb f[i]=miin{f[j]+1}j<i, 且s[j...i]是回文串 #include<iostream>#include<cstring>using......
  • uva 1169
    地图上有n个点(x,y),机器人从(0,0)出发到每个点捡垃圾(w[i]),承载最大重量为m在每个点都可以返回(0,0)点放置垃圾最短路程?n<1e5,m<100 看完范围只能设f[i],考虑前i......