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 ...
随机推荐
- PowerDesigner(九)-模型文档编辑器(生成项目文档)(转)
模型文档编辑器 PowerDesigner的模型文档(Model Report)是基于模型的,面向项目的概览文档,提供了灵活,丰富的模型文档编辑界面,实现了设计,修改和输出模型文档的全过程. 模型文 ...
- PowerDesigner(六)-物理数据模型(PDM逆向工程)(转)
物理数据模型PDM 物理数据模型(Physical Data Model,PDM):在数据库的逻辑结构设计好之后,就需要完成其物理设计,PDM就是为实现这一目的而设计的. 物理数据模型是以常用的DBM ...
- Windows 7,64位机器上安装DB2 7.2+FP7
1.要想在Windows 7,64位机器上安装DB2 7.2+FP7,注意:1)拷贝所有安装文件到本地2)设置setup.exe文件兼容windows 20003)使得users用户勾选“完全控制”权 ...
- JS中的内部类
js内部类 javascript中本身有提供一些可以直接使用的类,这种类就是内部类.主要有:Object.Array.Math.Boolean.String.Number.Date.RegExp. ...
- CSS中的长度值
以下总结来自慕课网(依然比较浅显). 长度单位总结一下,目前比较常用到px(像素).em.% 百分比,要注意其实这三种单位都是相对单位. 1.像素 像素为什么是相对单位呢?因为像素指的是显示器上的小点 ...
- spring mvc 基于注解的使用总结
本文转自http://blog.csdn.net/lufeng20/article/details/7598801 概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Sprin ...
- VS输入法问题
问题描述:启动VS,打开Winform等的界面设计,无法为控件输入中文,另外,运行程序,无法在TextBox等控件中输入中文: 本人的系统环境:Win7旗舰版,VS2008.VS2010和VS2012 ...
- RadioButtonList js获取选择的项
<asp:RadioButtonList ID="RadioButtonList1" runat="server"> <asp:ListIte ...
- interviewbit :Min Steps in Infinite GridBookmark Suggest Edit
You are in an infinite 2D grid where you can move in any of the 8 directions : (x,y) to (x+1, y), (x ...
- 用httpPost对JSON发送和接收的例子
HTTPPost发送JSON: private static final String APPLICATION_JSON = "application/json"; ...