博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 1107 E - Vasya and Binary String
阅读量:6967 次
发布时间:2019-06-27

本文共 1271 字,大约阅读时间需要 4 分钟。

思路:区间dp + 记忆化搜索

转移方程看上一篇博客。

代码:

#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include
using namespace std;#define fi first#define se second#define y1 y11#define pi acos(-1.0)#define LL long long//#define mp make_pair#define DEBUG#define pb push_back#define ls rt<<1, l, m#define rs rt<<1|1, m+1, r#define ULL unsigned LL#define pll pair
#define pli pair
#define pii pair
#define piii pair
#define pdd pair
#define mem(a, b) memset(a, b, sizeof(a))#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);//headconst int N = 105;LL dp[N][N][N];string s;int a[N];LL dfs(int l, int r, int k) { if(l > r) return 0; if(l == r) return a[k+1]; if(~dp[l][r][k]) return dp[l][r][k]; dp[l][r][k] = dfs(l, r-1, 0) + a[k+1]; for (int i = l; i < r; i++) { if(s[i] == s[r]) { dp[l][r][k] = max(dp[l][r][k], dfs(i+1, r-1, 0) + dfs(l, i, k+1)); } } return dp[l][r][k];}int main() { fio; int n; cin >> n; cin >> s; for (int i = 1; i <= n; ++i) cin >> a[i]; mem(dp, -1); cout << dfs(0, n-1, 0) << endl; return 0;}

 

转载于:https://www.cnblogs.com/widsom/p/10326648.html

你可能感兴趣的文章
操作系统原理
查看>>
epoll使用具体解释(精髓)
查看>>
毕业季-回去体检
查看>>
erlang otp中的socket参数设置
查看>>
js封装
查看>>
php抓取网页
查看>>
WordPress前台后台页面打开慢的解决方法
查看>>
selenium读取txt文件的几种方式
查看>>
【m从翻译os文章】写日志禁令Sqlnet.log和Listener.log
查看>>
Vim简明教程【CoolShell】
查看>>
音频编辑大师 3.3 注册名称 许可证
查看>>
基于Angularjs实现分页
查看>>
easyui常现错误
查看>>
GRUB启动管理器
查看>>
Atitit.执行cmd 命令行 php
查看>>
Maven最佳实践:Maven仓库
查看>>
***PHP多线程pthreads 实现QQ号码爬虫
查看>>
FZU2126:消除类游戏(DP)
查看>>
解决Cannot change version of project facet Dynamic web module to 3.0
查看>>
sql取整函数
查看>>