[USACO07OPEN]便宜的回文Cheapest Palindrome
字串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的更多相关文章
- [DP]P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome
题目翻译(借鉴自@ 神犇的蒟蒻) [问题描述] 追踪每头奶牛的去向是一件棘手的任务,为此农夫约翰安装了一套自动系统.他在每头牛身 上安装了一个电子身份标签,当奶牛通过扫描器的时候,系统可以读取奶牛的身 ...
- [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] = ...
- 洛谷P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome
题目链接: 点我 题目分析: 玄学\(dp\) 设\(val[s[i] - 'a' + 1]\)表示字母\(s[i]\)的花费 首先发现对于一个已经回文了的串\(s[i, j]\),在\(s[i - ...
- 洛谷 2890 [USACO07OPEN]便宜的回文Cheapest Palindrome
传送门 一道最简单的区间dp,然而我还是抄了题解. //Twenty #include<algorithm> #include<iostream> #include<cs ...
- 2018.06.29 洛谷P2890 [USACO07OPEN]便宜的回文(简单dp)
P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome 时空限制 1000ms / 128MB 题目描述 Keeping track of all the cows c ...
- 便宜的回文 (USACO 2007)(c++)
2019-08-21便宜的回文(USACO 2007) 内存限制:128 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 追踪每头奶牛的去向是一件棘手的任 ...
- 算法——回文(palindrome)
回文(palindrome):指的是从头读到尾与从尾读到头一模一样的字符串. 分别在C.Java与Python实现回文检测: C: #include <stdio.h> #include ...
- 便宜的回文串(区间DP)
题目链接:便宜的回文串 这道题刚开始其实还是没有思路的.没办法,只能看题解了... 其实我们在思考问题时,考虑到一段串增或减时会改变它的长度,所以转移时会麻烦... 但其实不用考虑那么多的问题,我们只 ...
- 编程:使用递归方式判断某个字串是否回文(Palindrome)
Answer: import java.util.Scanner; public class Palindrome { private static int len;//全局变量整型数据 privat ...
随机推荐
- SpringBoot Actuator
SpringBoot Actuator 提供了检查项目内部信息的一整套API,通常在项目启动时可以看到. 1.引入依赖包 <dependency> <groupId>org.s ...
- Hive中数据加载失败:root:supergroup:drwxr-xr-x
Hive中数据加载失败:inode=:root:supergroup:drwxr-xr-x 在执行hive,数据加载的时候,遇到了一个错误,如下图: 在执行程序的过程中,遇到权限问题很正常,背后原理也 ...
- “幕后英雄”之Backing Fields【Microsoft Entity Framework Core随笔】
刘德华 有一首歌叫<马桶>,其中有一句歌词是:每一个马桶都是英雄. EFCore也有一个英雄,在幕后默默地任劳任怨.它就叫 "支持字段" (Backing Fields ...
- Filebeat占用内存和CPU过高问题排查
经反馈,新部署的服务器上filebeat占用的cpu过高,且内存只增不减. 而据我了解filebeat非常轻量级,正常情况下占用的资源几乎都能忽略不计,所以怀疑是filebeat本身出了问题. 第一时 ...
- Git通过密钥对远程仓库上传和更新详细操作
1,先到ssh中ls查看之前本地生成的公钥和私钥,然后将别人的密钥替换掉自己的密钥,这里我把别人的密钥放在d:/desktop/id_rsa 中,利用cp /D/Desktop/id_rsa id_ ...
- mysql 按类别之用一条SQL语句查询出每个班前10名学生数据
select * from 学生信息表 a where 10 > (select count(*) from 学生信息表 where 班级ID = a.班级ID and 班内名次 > a ...
- linux在tomcat中指定jdk
setclasspath.sh和catalina.sh中写入 export JAVA_HOME=/qbtapp/jdk-8u111-linux-i586/jdk1.8.0_111export JRE_ ...
- Shell 函数相关
一.函数的两种定义方式 第一种:函数名(){ ...... } 第二种:function 函数名{ ...... } 调用时直接使用 函数名 调用,将函数当作一个“命令”即可.函数内部直接使用 $1. ...
- holer实现外网访问本地tomcat
外网访问内网Tomcat 内网主机上安装了Tomcat,只能在局域网内访问,怎样从公网也能访问本地Tomcat? 本文将介绍使用holer实现的具体步骤. 1. 准备工作 1.1 安装Java 1.7 ...
- Spring动态获取已注入的对象的方法
1.根据类获取对象 @Autowired ApplicationContext context; GenericMapper<T,String> dao=(GenericMapper< ...