ural1238. Folding(记忆化)
这算模拟加记忆化吗 找bug找了2个多小时。。记忆化部分好想 就是字符串处理部分挫了 一个个复制模拟 各种修改查找
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
using namespace std;
#define INF 0xfffffff
int dp[][],o[][];
char s[][][],ss[];
int len(int x)
{
int q=;
while(x)
{
q++;x/=;
}
return q;
}
int dfs(int x,int y)
{
if(dp[x][y]!=INF) return dp[x][y];
if(x==y)
{
s[x][y][] = ss[x];
s[x][y][] = '\0';
o[x][y] = ;
return dp[x][y] = ;
}
int i,j,flag,k;
for(i = x ; i < y ; i++)
{
dp[x][i] = dfs(x,i);
dp[i+][y] = dfs(i+,y);
flag = ;
k = INF;
if(strcmp(s[x][i],s[i+][y])==)
{
int t = ;
if(o[x][i]+o[i+][y]>)
t+=;
t+=len(o[x][i]+o[i+][y]);
k = strlen(s[x][i])+t;flag = ;
}
if(dp[x][i]+dp[i+][y]<k)
{
k = dp[x][i]+dp[i+][y];//cout<<s[x][i]<<" "<<s[i+1][y]<<" "<<" "<<i+1<<" "<<y<<" "<<dp[x][y]<<endl;
}
if(dp[x][y]<=k&&!flag) continue;
if(dp[x][y]>=k)
{
dp[x][y] = k;
if(!flag)
{
int g = ,q=;
int k1 = strlen(s[x][i]);
if(o[x][i]<=&&k1==)
{
for(j = ; j <= o[x][i]; j++)
s[x][y][g++] = s[x][i][];
}
else if(o[x][i]<=&&k1==)
{
for(j = ; j <= o[x][i] ; j++)
{
s[x][y][g++] = s[x][i][];
s[x][y][g++] = s[x][i][];
}
}
else
{
if(o[x][i]>)
{
int qq = o[x][i],a[],t=;
while(qq)
{
a[t++] = qq%;
qq/=;
}
for(j = t- ; j >= ; j--)
s[x][y][g++] = a[j]+'';
s[x][y][g++] = '(';
q = ;
}
for(j = ; j < k1;j++)
s[x][y][g++] = s[x][i][j];
if(q)
s[x][y][g++] = ')';
}
k1 = strlen(s[i+][y]);q=;
if(o[i+][y]<=&&k1==)
{
for(j = ; j <= o[i+][y]; j++)
s[x][y][g++] = s[i+][y][];
}
else if(o[i+][y]<=&&k1==)
{
for(j = ; j <= o[i+][y] ; j++)
{
s[x][y][g++] = s[i+][y][];
s[x][y][g++] = s[i+][y][];
}
}
else
{
if(o[i+][y]>)
{
int qq = o[i+][y],a[],t=;
while(qq)
{
a[t++] = qq%;
qq/=;
}
for(j = t- ; j >= ; j--)
s[x][y][g++] = a[j]+'';
s[x][y][g++] = '(';
q = ;
}
for(j = ; j < k1;j++)
s[x][y][g++] = s[i+][y][j];
if(q)
s[x][y][g++] = ')';
}
o[x][y] = ;
s[x][y][g] = '\0';
}
else
{
strcpy(s[x][y],s[x][i]);
//cout<<s[x][y]<<" "<<x<<" "<<y<<endl;
o[x][y] = o[x][i]+o[i+][y];
}
}
}
return dp[x][y];
}
int main()
{
int i,j,k;
for(i = ;i <= ; i++)
for(j = ;j <= ; j++)
dp[i][j] = INF;
cin>>ss;
k = strlen(ss);
int minz = dfs(,k-),q=strlen(s[][k-]);
//cout<<q<<endl;
if(o[][k-]<=&&q==)
for(i = ; i <= o[][k-] ; i++)
cout<<s[][k-][];
else if(o[][k-]<=&&q==)
for(i = ; i <= o[][k-] ; i++)
{
cout<<s[][k-][]<<s[][k-][];
}
else
{
if(o[][k-]>)
cout<<o[][k-]<<'(';
for(i = ; i < q ; i++)
cout<<s[][k-][i];
if(o[][k-]>)
cout<<')';
}
puts("");
return ;
}
ural1238. Folding(记忆化)的更多相关文章
- *HDU1142 最短路+记忆化dfs
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...
- 【BZOJ-3895】取石子 记忆化搜索 + 博弈
3895: 取石子 Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 263 Solved: 127[Submit][Status][Discuss] D ...
- hdu3555 Bomb (记忆化搜索 数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others) Memory ...
- Codeforces Round #174 (Div. 1) B. Cow Program(dp + 记忆化)
题目链接:http://codeforces.com/contest/283/problem/B 思路: dp[now][flag]表示现在在位置now,flag表示是接下来要做的步骤,然后根据题意记 ...
- hdu 4826(dp + 记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4826 思路:dp[x][y][d]表示从方向到达点(x,y)所能得到的最大值,然后就是记忆化了. #i ...
- zoj 3644(dp + 记忆化搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 思路:dp[i][j]表示当前节点在i,分数为j的路径条数,从 ...
- loj 1044(dp+记忆化搜索)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26764 思路:dp[pos]表示0-pos这段字符串最少分割的回文 ...
- DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects
题目传送门 题意:训练指南P250 分析:DFS记忆化搜索,范围或者说是图是已知的字串构成的自动机图,那么用 | (1 << i)表示包含第i个字串,如果长度为len,且st == (1 ...
随机推荐
- Slim + Twig 构建PHP Web应用程序
Twig : PHP 视图模板引擎,类似于Smart模板引擎. 下载地址:http://twig.sensiolabs.org/ Slim: 轻量级PHP MVC框架,可用于构建Web app,Res ...
- sigaction 函数
本文主要参考<unix环境高级编程> sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作). int sigaction(int signo,con ...
- JS数据类型的理解(猜测)
Js 数据类型 对于这个主题,首先来看几个问题,如果你对这几个问题很清楚的话,那就请直接跳过吧,不用接着往下看了,如果不清楚,建议你还是看看. 1)如果判断函数?function 和object的联系 ...
- mouseover与mouseenter的区别
mouseenter事件在鼠标进入某个元素,或第一次进入这个元素的某个子元素时触发.一旦触发后,在mouseleave之前,鼠标在这个元素的子元素上触发mouseenter事件都不会触发这个元素的mo ...
- Delphi美化界面 转载
手头的项目做的差不多了,交给客户,结果给出的结论是界面太难看了,至少要做成像QQ类似的界面.(目前是QQ2009界面确实还是不错的,本人也非常喜欢). 1.透明问题. 要重新调整界面确实很麻烦,以前用 ...
- 让Word2007、word2003中的GIF图片动起来
在PPT中插入会动的GIF图片,播放是生动有趣:可是GIF图片插入Word2007文档后却变成了静态画面,表现效果大打折扣.让我们装一个小控件,让图片动起来! 第一步:下载AniGIF.ocx控件,解 ...
- 3[doses] ------一种诡异的写法
在 head first c 的第60页,有这么一道题: 一个富翁因为服药过度而死亡. 下面是自动服药器的代码: #include <stdio.h> int main(void) { , ...
- 2014多校第十场1004 || HDU 4974 A simple water problem
题目链接 题意 : n支队伍,每场两个队伍表演,有可能两个队伍都得一分,也可能其中一个队伍一分,也可能都是0分,每个队伍将参加的场次得到的分数加起来,给你每个队伍最终得分,让你计算至少表演了几场. 思 ...
- JS中基本类型与包装类型的关系
对于JS中一些类型的转化的东西,自己测试并得出的结论,有错误的地方请大大们留言. 不多废话,直接贴代码,测试请直接拷贝全部代码: <!DOCTYPE html> <html> ...
- Protobuf动态解析那些事儿
需求背景 在接收到 protobuf 数据之后,如何自动创建具体的 Protobuf Message 对象,再做反序列化.“自动”的意思主要有两个方面:(1)当程序中新增一个 protobuf Mes ...