zoukankan      html  css  js  c++  java
  • poj 3280 回文字符串问题 dp算法

    题意:给一个字符串,构成回文(空也是回文) 其中增删都需要代价。问:代价最少?

    思路:把字符串s变空  dp[i][j]表示变成回文的最小代价

       for(i=m-1;i>=0;--i)

           for(j=i+1;i<w;j++)lsdjfl

            dp[i][j]=min(dp[i+1][j]+cost[s[i]-'a']],dp[i][j-1]+cost[s[j]-'a'])

            if(s[i]==s[j])   dp[i][j]=min(dp[i][j],dp[i+1][j-1])

    其中cost表示增删中最小代价 

    解决问题的代码:

    #include <iostream>
    #include <string>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    int dp[2048][2048];
    int cost[48];
    int main()
    {
            int n, m;
            cin >> n >> m;
            string s;
            cin >> s;
            for (int i = 0; i < n; i++)
            {
                   int add, del;
                   char c;
                   cin >> c >> add >> del;
                   cost[c - 'a'] = min(add, del);
            }
            for(int i=m-1;i>=0;--i)
                   for (int j = i + 1; j < m; j++)
                   {
                           dp[i][j] = min(dp[i + 1][j] + cost[s[i] - 'a'], dp[i][j - 1] + cost[s[j] - 'a']);
                           if (s[i] == s[j])
                                  dp[i][j] = min(dp[i][j], dp[i + 1][j - 1]);
                   }
            printf("%d
    ", dp[0][m - 1]);
            return 0;
    }
    君子知命不惧,自当日日自新
  • 相关阅读:
    git命令
    WPF让绑定支持表达式
    WPF多语言动态切换的一种方法
    C#监测系统事件,睡眠状态
    记一次渗透测试
    Relay
    ECShop相关漏洞复现/分析
    人工智能学习路线图
    抽奖算法
    关于微信开发的 appid,openid,unionid
  • 原文地址:https://www.cnblogs.com/xuxiaojin/p/9407251.html
Copyright © 2011-2022 走看看