zoukankan      html  css  js  c++  java
  • POJ 3280 DP

    题意:
    这里写图片描述
    这里写图片描述
    思路:
    DP
    f[i][j]表示把i到j变成回文串的最少代价

    f[start][end]=f[start+1][end]+min(node[a[start]].del,node[a[start]].add);
    f[start][end]=min(f[start][end],f[start][end-1]+min(node[a[end]].add,node[a[end]].del));
    
    //By SiriusRen
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int n,m,f[2222][2222];
    char a[2222],jy;
    struct Node{int add,del;}node[256];
    int main()
    {
        scanf("%d%d",&n,&m);
        scanf("%s",a+1);
        for(int i=1;i<=n;i++)
            scanf("
    %c",&jy),scanf("%d%d",&node[jy].add,&node[jy].del);
        for(int len=0;len<=m;len++){
            for(int start=1;start<=m;start++){
                int end=start+len;
                if(end>m)break;
                if(a[start]!=a[end]){
                    f[start][end]=f[start+1][end]+min(node[a[start]].del,node[a[start]].add);
                    f[start][end]=min(f[start][end],f[start][end-1]+min(node[a[end]].add,node[a[end]].del));
                }
                else{
                    f[start][end]=f[start+1][end-1];
                }
            }
        }
        printf("%d
    ",f[1][m]);
    }

    这里写图片描述

  • 相关阅读:
    LeetCode(122. 买卖股票的最佳时机 II)
    LeetCode(485. 最大连续1的个数)

    约瑟夫问题
    链表
    队列
    稀疏数组
    乐优商城项目学习
    LeetCode_Climbing Stairs
    数据结构&&算法基础知识
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532271.html
Copyright © 2011-2022 走看看