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 ...
随机推荐
- fpu栈溢出
老大们遇到个问题,有一堆浮点数运算,分开写就对,合一起就溢出. 是因为定义的函数返回float的时候,别的地方声明是void错了,这样的错误累计八次之后,浮点数寄存器就满了.没地方放就错了. 函数前面 ...
- 使用css3伪元素制作时间轴并且实现鼠标选中高亮效果
利用css3来制作时间轴的知识要点:伪元素,以及如何在伪元素上添加锚伪类 1)::before 在元素之前添加内容. 2)::after 在元素之后添加内容. 提示:亦可写成 :before :aft ...
- HTTP报头详解
HTTP头字段包括4类: general-header ; 通用报头 request-header ; 请求报头 response-header ; 响应报头 ...
- javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例
栈(Stack)是限定仅在表尾进行插入或删除操作的线性表.表尾为栈顶(top),表头为栈底(bottom),不含元素的空表为空栈. 栈又称为后进先出(last in first out)的线性表. 堆 ...
- HDU 1247 Hat’s Words(map,STL,字符处理,string运用)
题目 用map写超便捷 也可以用字典树来写 我以前是用map的: #include<stdio.h> #include<string.h> #include<algori ...
- HTML5 webSQL
https://www.ibm.com/developerworks/cn/web/1108_zhaifeng_websqldb/ <!DOCTYPE HTML> <html&g ...
- CRM-性能测试报告
1. 概述 1.1. 测试目的 CRM系统性能测试是针对系统并发处理能力.交易响应时间等性能指标所进行的验证性测试.目的是尽可能地模拟生产环境的前提下,实现以下目标: 获取上线版本测试需 ...
- ant+jmeter+crontab实现自动化性能测试
准备工作: 1.下载jmeter(我下载的apache-jmeter-2.13.zip) 2.配置jmeter环境变量,即path前添加jmeter的bin路径) 3.下载ant(我使用的apache ...
- lintcode:Wiggle Sort II
Wiggle Sort II Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] ...
- skip list
概述 Skip list是平衡树的一种替代的数据结构,但是和红黑树不相同的是,跳表对于树的平衡的实现是基于一种随机化的算法的,这样也就是说跳表的插入和删除的工作是比较简单的.并且是Redis.Leve ...