字串S长M,由N个小写字母构成。欲通过增删字母将其变为回文串,增删特定字母花费不同,求最小花费。

       题目描述见上

     

     显然 这是一道区间DP

从两头DP,枚举长度啥的很套路了。具体细节请参见代码qwq

#include<iostream>
#include<cstdio>
#include<cstring>
#define re register int
#define maxn 2000+5
#define maxn1 3000+5
int val[maxn],dp[maxn1][maxn1],val1,val2;
char ch[maxn1],temp[];
using namespace std;
inline int read()
{
int x=,f=;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<)+(x<<)+ch-'';
ch=getchar();
}
return x*f;
}
int main()
{
int n,m;
memset(dp,0x3f,sizeof(dp));//必须要初始化
n=read();
m=read();
scanf("%s",ch+);
for(re i=;i<=n;i++)
{
cin>>temp[];
val1=read();
val2=read();
val[temp[]-'a']=min(val1,val2);
//易得从中间插入或删除是等效的
}
for(re i=;i<=m;i++)
{
dp[i][i]=;
if(ch[i]==ch[i+]) dp[i][i+]=;
}
for(re len=;len<=m;len++)
//len必须从0枚举
//否则会少算情况(连样例都过不了QAQ)
for(re i=;i<=m;i++)
{
int j=len+i;
int x1=ch[i-]-'a';
int x2=ch[j+]-'a';
if(x1==x2) dp[i-][j+]=min(dp[i-][j+],dp[i][j]);
dp[i-][j]=min(dp[i-][j],dp[i][j]+val[x1]);
dp[i][j+]=min(dp[i][j+],dp[i][j]+val[x2]);
//每种状态都需要算一遍
//因为不知道会从哪个扩展
}
cout<<dp[][m];
return ; }

某一天,FJ从农场的左上角走到右下角,当然啦,每次他只能往右或者往下走一格。FJ把他走过的路径记录下来。现在,请你把他统计一下,所有路径中,回文串的数量(从前往后读和从后往前读一模一样的字符串称为回文串)。

题目描述见上

显然 

这道题和上一道题并没有什么关系(放到这里只是因为都是奶牛题+都有回文)

滚动数组优化dp

#include<bits/stdc++.h>
#define re register int
#define LL long long
#define mod 1000000007
#define maxn 500+5
using namespace std;
LL ans;
LL f[maxn][maxn];
char field[maxn][maxn];
inline int read()
{
int x=;
char ch=getchar();
while(!isdigit(ch))
ch=getchar();
while(isdigit(ch))
{
x=x*+ch-'';
ch=getchar();
}
return x;
}
inline void write(LL x)
{
if(x>) write(x/);
putchar(x%+'');
}
int n;
int main()
{
n=read();
for(re i=;i<=n;i++)
for(re j=;j<=n;j++)
cin>>field[i][j];
if(field[][]!=field[n][n])
{
write();
return ;
}
f[][]=;
for(re i=;i<=n+;i++)
for(re j=i-;j>=;j--)
for(re k=i-;k>=;k--)
{
if(field[j][i-j]==field[n+k-i+][n-k+])
f[j][k]=(f[j][k]+f[j-][k]+f[j][k-]+f[j-][k-])%mod;
else f[j][k]=;
}
for(re i=;i<=n;i++)
ans=(ans+f[i][i])%mod;
write(ans);
return ;
}

[USACO07OPEN]便宜的回文Cheapest Palindrome的更多相关文章

  1. [DP]P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome

    题目翻译(借鉴自@ 神犇的蒟蒻) [问题描述] 追踪每头奶牛的去向是一件棘手的任务,为此农夫约翰安装了一套自动系统.他在每头牛身 上安装了一个电子身份标签,当奶牛通过扫描器的时候,系统可以读取奶牛的身 ...

  2. [luoguP2890] [USACO07OPEN]便宜的回文Cheapest Palindrome(DP)

    传送门 f[i][j] 表示区间 i 到 j 变为回文串所需最小费用 1.s[i] == s[j] f[i][j] = f[i + 1][j - 1] 2.s[i] != s[j] f[i][j] = ...

  3. 洛谷P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome

    题目链接: 点我 题目分析: 玄学\(dp\) 设\(val[s[i] - 'a' + 1]\)表示字母\(s[i]\)的花费 首先发现对于一个已经回文了的串\(s[i, j]\),在\(s[i - ...

  4. 洛谷 2890 [USACO07OPEN]便宜的回文Cheapest Palindrome

    传送门 一道最简单的区间dp,然而我还是抄了题解. //Twenty #include<algorithm> #include<iostream> #include<cs ...

  5. 2018.06.29 洛谷P2890 [USACO07OPEN]便宜的回文(简单dp)

    P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome 时空限制 1000ms / 128MB 题目描述 Keeping track of all the cows c ...

  6. 便宜的回文 (USACO 2007)(c++)

    2019-08-21便宜的回文(USACO 2007) 内存限制:128 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 追踪每头奶牛的去向是一件棘手的任 ...

  7. 算法——回文(palindrome)

    回文(palindrome):指的是从头读到尾与从尾读到头一模一样的字符串. 分别在C.Java与Python实现回文检测: C: #include <stdio.h> #include ...

  8. 便宜的回文串(区间DP)

    题目链接:便宜的回文串 这道题刚开始其实还是没有思路的.没办法,只能看题解了... 其实我们在思考问题时,考虑到一段串增或减时会改变它的长度,所以转移时会麻烦... 但其实不用考虑那么多的问题,我们只 ...

  9. 编程:使用递归方式判断某个字串是否回文(Palindrome)

    Answer: import java.util.Scanner; public class Palindrome { private static int len;//全局变量整型数据 privat ...

随机推荐

  1. MySQL常用的锁机制 ----------顾名思义

    悲观锁与乐观锁: 悲观锁:顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.传统的关系型数据库里边就用到了很多这 ...

  2. How to find out which version of tensorflow is installed in my pc? - 如何找出我的电脑中安装了哪个版本的 tensorflow?

    I'm using tensorflow and have got some weired issues. I'm told it might be related to the version of ...

  3. java基本类型和数字类及其相关计算

    --- java 八大基本类型 byte  short int long double float boolean char --对应的包装类 Byte Short Integer Long Doub ...

  4. systemd的日志管理进程journald

    使用Journalctl查看并操作Systemd日志 systemd拥有强大的处理与系统日志记录功能.在使用其它工具时,日志往往被分散在多套系统当中,由不同的守护进程负责处理. Journal的实现归 ...

  5. github下载项目代码到本地,不能运行 本地改完代码 再上传

    首先用git bash here,在指定目录下执行, git clone 将项目拉取下来, 试运行: 发现需要配置idea的SDK/jdk, 还要选择language level, 建立输出目录tar ...

  6. 独家!DevExpress VCL Controls 2019发展路线图(No.1)

    [DevExpress VCL Controls下载] 根据调查结果和反馈,DevExpress官方团队最终确定了DevExpress VCL Controls 2019年的路线图. 关于调查结果的重 ...

  7. java 秒时间格式化

    public static String durationFormat(Integer totalSeconds) { if (totalSeconds == null || totalSeconds ...

  8. 一些常见的“功能性”JS事件

    ————————倒序上升———————— (2)给一些 保存.提交 按钮,添加 防止重复提交 事件(常见一例) $("#submitRank").attr("disabl ...

  9. struts2的文件配置以及注释代码

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-/ ...

  10. Codeforces Round #245 (Div. 1) B. Working out (dp)

    题目:http://codeforces.com/problemset/problem/429/B 第一个人初始位置在(1,1),他必须走到(n,m)只能往下或者往右 第二个人初始位置在(n,1),他 ...