题目:http://poj.org/problem?id=1159

刚开始,从样例的特征去思考。总让我从回文数的角度去思考,想出几个方案,可都用了数据去检验,发现不行。如:ABCDDCB,BACDCABD等样例。

然后,思考半天,没想出可行的方案。于是,看人家的解题报告,发现如下公式:

此题所需的解 = 原字符串的长度 — 原字符串和逆字符串的最长公共子序列的长度

于是,啪啦啪啦把代码写完,测试,没问题。提交,发现,Rumtime Error。发现错误,动态规划的数组开辟空间过大,放在函数里面,把它放到函数外就OK了。然后,再次提交,发现,Memory Limit Exceed。解决办法,把动态规划的dp数组压缩空间,变成滚动数组。于是,AC代码就变成如下的样子了。

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
#define INF 88888888

#define MAX_N 5000
int length;
];
][MAX_N + ];//dp[i % 2][j]:=s1...si和s1...sj的LCS的长度

void inputTestData(){
    cin >> length;
    ;i<length;i++){
        cin >> originalStr[i];
    }
}

char* reverseStr(char* str,int length){
    char* p = (char*)malloc(sizeof(char) * length);
    ;i<length;i++){
        *(p + i) = *(str + length -  - i);
    }
    return p;
}

int calcLongestCommonSubsequenceLength(char* str1,char* str2){
    ;i<length;i++){
        ;j<length;j++){
            if(str1[i] == str2[j]){
                dp[(i + ) % ][j + ] = dp[i % ][j] + ;
            }
            else{
                dp[(i + ) % ][j + ] = max(dp[(i + ) % ][j],dp[i % ][j + ]);
            }
        }
    }
    ][length];
}

void solve(){
    inputTestData();
    char* reversedStr = reverseStr(originalStr,length);
    int lengthOfLcs = calcLongestCommonSubsequenceLength(originalStr,reversedStr);
    int result = length - lengthOfLcs;
    cout << result << endl;
}

int main(void){
    solve();
    ;
}

附:使用C/C++出现Runtime Error的情况,基本都是如下原因:

1.数组越界;(本质上还是第二个原因)

2.访问没有权限访问的内容,即没有为指针分配足够的空间;

3.指针的值是NULL,即常说的“空指针”。

如果语言是Java,出现任何Exception或Error都会得到Runtime Error的结果。

常见的Exception或Error:

空指针异常,数组越界异常,类型转换异常,除0异常。

栈溢出错误(通常由无穷递归引起,也可能是方法内开辟的数组空间过大),断言错误(由于OJ无法看到错误栈的信息,所以,在算法竞赛中,不要用assert这个关键字)。

POJ1159解题心得的更多相关文章

  1. leetcode网解题心得——61. 旋转链表

    目录 leetcode网解题心得--61. 旋转链表 1.题目描述 2.算法分析: 3.用自然语言描述该算法 4.java语言实现 5.C语言实现 leetcode网解题心得--61. 旋转链表 1. ...

  2. wechall.net/stegano 解题心得

    /* 转载请注明出处:http://www.cnblogs.com/Martinium/p/wechall_stegano.html */ 最近迷上了 www.wechall.net 网站,里面都是些 ...

  3. Zerojudge解题心得

    我进入娄山中学已经有1年多了,也就是说我学习编程也有1年多了,在这一年多的时间中,我已经对编程有了初步的了解.其实只要抓住平时的空闲时间加以利用,哪怕每个星期就做那么三四题,经过了一段时间沉淀,也会有 ...

  4. 我的ZJ解题心得

    想要学好程序设计第一是要养成你的编程思维,也就是你对编程的一种概念和思维定式,长期的解题会让你产生解题经验进而形成一种思维定式,比如看到一个题目就立即想出这题要用什么方法解题这样.编程思维我认为还包括 ...

  5. 树状数组:CDOJ1583-曜酱的心意(树状数组心得)

    曜酱的心意 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 131072/131072KB (Java/Others) Description ...

  6. 题目1203:IP地址

    题目: http://ac.jobdu.com/problem.php?pid=1203 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3052 解决:1504 题目描述: 输入一个ip地 ...

  7. HDU 2602 Bone Collector WA谁来帮忙找找错

    Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bone Collec ...

  8. 2106 Problem F Shuffling Along 中石油-未提交-->已提交

    题目描述 Most of you have played card games (and if you haven’t, why not???) in which the deck of cards ...

  9. 2101 Problem A Snake Filled

    题目描述 “What a boring world!”Julyed felt so bored that she began to write numbers on the coordinate pa ...

随机推荐

  1. LINUX系统下的squid服务

    一.squid服务实现正向代理 正向代理,是一个位于客户端和原始服务器之间的服务器. 客户端可以通过服务器的缓存数据,得到所需的结果. 示例:在一台可以联网的主机上,安装squid软件之后,就可以在另 ...

  2. 【dlbook】实践方法论

    [性能度量] 使用什么误差度量? 目标性能大致为多少? [默认的基准模型] 首先尝试分段线性单元,ReLU以及扩展. SGD一般是合理的选择,选加入动量的版本,衰减方法不一. 批标准化在优化出现问题时 ...

  3. 编译安装pgbouncer-checking for OpenSSL... configure: error: not found

    花了一上午时间将pgbouncer的参数通读了一遍,对他有个大致的了解:1.配置分为连接池和pgbouncer两个部分[database]\[pgbouncer ].2.一条记录对应创建一个连接池,连 ...

  4. 给SqlParameter参数指定或不指定:@变量标识符的区别是什么?

    对于sql语句中一个@的参数@au_id,在sqlParameter中,可以用@au_id,也可以用au_id. 要是bt点的,用两个@,你就不能随便省略@了. 对于sql语句 : select *  ...

  5. iOS系统知识架构(转)

    转载的,哪些所谓的资深开发,谁敢说自己没有知识盲区?http://ios.skyfox.org/route.html

  6. OPEN(SAP) UI5 学习入门系列之一:扫盲与热身(下)

    1 UI5代码结构 上一次我们一起用了20秒的时间完成一个UI5版的Hello World.应用打开后有一个按钮,按钮的文字是Hello World,点击这个按钮之后,按钮会慢慢的消失掉(Fade o ...

  7. caffe学习4——net

    参考文献 1 The net jointly defines a function and its gradient by composition and auto-differentiation. ...

  8. Mac设置SVN:Cornerstone3

    前因 在windows下用Tortoisesvn.可惜Tortoisesvn没有Mac版,只能上知乎寻找适合于 Mac的SVN软件. 经过 找到了一款名为Cornerstone的软件.在App Sto ...

  9. 每天一个linux命令:【转载】cd命令

    Linux cd 命令可以说是Linux中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd 命令上的. 所以,学习Linux 常用命令,首先就要学好 cd 命令的使用方法技巧. 1.  ...

  10. BZOJ4543 POI2014 Hotel加强版 【长链剖分】【DP】*

    BZOJ4543 POI2014 Hotel加强版 Description 同OJ3522 数据范围:n<=100000 Sample Input 7 1 2 5 7 2 5 2 3 5 6 4 ...