洛谷 P2890 [USACO07OPEN] Cheapest Palindrome G 做题记录
我不会区间 dp。
设
。- 当
时, 。
注意到当
状态数为
点击查看代码
#include<bits/stdc++.h>
#define int ll
#define mem(a,b) memset((a),(b),sizeof(a))
#define m0(a) memset((a),0,sizeof(a))
#define lb(x) ((x)&-(x))
#define lc(x) ((x)<<1)
#define rc(x) (((x)<<1)|1)
#define pb(G,x) (G).push_back((x))
#define For(a,b,c) for(int a=(b);a<=(c);a++)
#define Rep(a,b,c) for(int a=(b);a>=(c);a--)
#define in1(a) a=read()
#define in2(a,b) a=read(), b=read()
#define in3(a,b,c) a=read(), b=read(), c=read()
#define inn(i,n,a) For(i,1,n) a[i]=read();
#define ll long long
#define i128 __int128
using namespace std;
inline int read() {
int xx= 0;int f= 1;
char c = getchar();
while(c<'0'||c>'9') {
if(c=='-') f= -1;
c= getchar();
}
while(c>='0'&&c<='9') {
xx= (xx<<1)+(xx<<3)+(c^48);
c= getchar();
}
return xx*f;
}
#define maxn 2030
int n,m;
string s;
int cst[30][5];
int f[maxn][maxn];
signed main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>n>>m;
cin>>s;
s=' '+s;
For(i,1,n) {
char ch;
cin>>ch;
ch=ch-'a';
cin>>cst[ch][0]>>cst[ch][1];
}
mem(f,0x3f);
For(i,1,n) f[i][i]=0;
For(i,1,n-1) if(s[i]==s[i+1]) f[i][i+1]=0;
For(len,1,m) {
For(i,1,m) {
if(i+len>m) break;
int j=i+len;
f[i][j]=min(f[i][j],f[i][j-1]+min(cst[s[j]-'a'][0],cst[s[j]-'a'][1]));
f[i][j]=min(f[i][j],f[i+1][j]+min(cst[s[i]-'a'][0],cst[s[i]-'a'][1]));
if(s[i]==s[j]) f[i][j]=min(f[i][j],f[i+1][j-1]);
}
}
cout<<f[1][m];
}
本文来自博客园,作者:coding_goat_qwq,转载请注明原文链接:https://www.cnblogs.com/CodingGoat/p/18549289
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统