zoukankan      html  css  js  c++  java
  • poj 3280 Cheapest Palindrome

    链接:http://poj.org/problem?id=3280

    思路:题目给出n种m个字符,每个字符都有对应的添加和删除的代价,求出构成最小回文串的代价

    dp[i][j]代表区间i到区间j成为回文串的最小代价,那么对于dp[i][j]有三种情况:

    1、dp[i+1][j]表示区间i+1到区间j已经是回文串了的最小代价,那么对于s[i]这个字母,我们有两种操作,删除与添加,对应有两种代价,dp[i+1][j]+add[s[i]],dp[i+1][j]+del[s[i]],取这两种代价的最小值;

    2、dp[i][j-1]表示区间i到区间j-1已经是回文串了的最小代价,那么对于s[j]这个字母,同样有两种操作,dp[i][j-1]+add[s[j]],dp[i][j-1]+del[s[j]],取最小值

    3、若是s[i]==s[j],dp[i+1][j-1]表示区间i+1到区间j-1已经是回文串的最小代价,那么对于这种情况,我们考虑dp[i][j]与dp[i+1][j-1]的大小

    然后dp[i][j]取上面这些情况的最小值

     1 #include<cstdio>  
     2 #include<iostream>  
     3 #include<algorithm>
     4 #include<math.h> 
     5 #include<string.h>  
     6 #include<vector> 
     7 #include<queue>
     8 #include<iterator>
     9 #include<vector>
    10 #include<set>
    11 #define dinf 0x3f3f3f3f
    12 typedef long long ll;
    13 
    14 using namespace std;
    15 
    16 char s[2005],c[5];
    17 int dp[2005][2005],add[2005],del[2005];
    18 
    19 int main()
    20 {
    21     int n,m;
    22     while(scanf("%d%d",&n,&m)!=EOF)
    23     {
    24         memset(dp,0,sizeof(dp)); 
    25         scanf("%s",s+1); 
    26         s[0]=2;
    27         
    28         for(int i=1;i<=n;i++)
    29         {
    30             char ch[10];
    31             int tmp1,tmp2;
    32             scanf("%s%d%d",ch,&tmp1,&tmp2);
    33             add[ch[0]-'a'+1]=tmp1;
    34             del[ch[0]-'a'+1]=tmp2;
    35         }
    36         for(int i=m-1;i>=1;i--)
    37             for(int j=i+1;j<=m;j++)
    38             {
    39                 dp[i][j]=min(dp[i+1][j]+add[s[i]-'a'+1],dp[i+1][j]+del[s[i]-'a'+1]);
    40                 int tmp=min(dp[i][j-1]+add[s[j]-'a'+1],dp[i][j-1]+del[s[j]-'a'+1]);
    41                 dp[i][j]=min(dp[i][j],tmp);
    42                 if(s[i]==s[j])
    43                     dp[i][j]=min(dp[i][j],dp[i+1][j-1]);
    44             }
    45         printf("%d
    ",dp[1][m]);
    46     }
    47     return 0;
    48  } 
  • 相关阅读:
    大学毕业4年-回顾和总结(1)-钱,金钱观
    VR开发中性能问题—OculusWaitForGPU
    动态规划(一)
    POJ 2229 Sumsets
    hihoCoder #1122 : 二分图二•二分图最大匹配之匈牙利算法
    hihoCoder #1127 : 二分图二·二分图最小点覆盖和最大独立集
    hihoCoder #1121 : 二分图一•二分图判定
    HDU 1978 How many ways
    POJ1579 Function Run Fun
    POJ 2081 Recaman's Sequence
  • 原文地址:https://www.cnblogs.com/pter/p/5729916.html
Copyright © 2011-2022 走看看