POJ1159解题心得
题目: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解题心得的更多相关文章
- leetcode网解题心得——61. 旋转链表
目录 leetcode网解题心得--61. 旋转链表 1.题目描述 2.算法分析: 3.用自然语言描述该算法 4.java语言实现 5.C语言实现 leetcode网解题心得--61. 旋转链表 1. ...
- wechall.net/stegano 解题心得
/* 转载请注明出处:http://www.cnblogs.com/Martinium/p/wechall_stegano.html */ 最近迷上了 www.wechall.net 网站,里面都是些 ...
- Zerojudge解题心得
我进入娄山中学已经有1年多了,也就是说我学习编程也有1年多了,在这一年多的时间中,我已经对编程有了初步的了解.其实只要抓住平时的空闲时间加以利用,哪怕每个星期就做那么三四题,经过了一段时间沉淀,也会有 ...
- 我的ZJ解题心得
想要学好程序设计第一是要养成你的编程思维,也就是你对编程的一种概念和思维定式,长期的解题会让你产生解题经验进而形成一种思维定式,比如看到一个题目就立即想出这题要用什么方法解题这样.编程思维我认为还包括 ...
- 树状数组:CDOJ1583-曜酱的心意(树状数组心得)
曜酱的心意 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 131072/131072KB (Java/Others) Description ...
- 题目1203:IP地址
题目: http://ac.jobdu.com/problem.php?pid=1203 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3052 解决:1504 题目描述: 输入一个ip地 ...
- HDU 2602 Bone Collector WA谁来帮忙找找错
Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bone Collec ...
- 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 ...
- 2101 Problem A Snake Filled
题目描述 “What a boring world!”Julyed felt so bored that she began to write numbers on the coordinate pa ...
随机推荐
- MoreEffectiveC++Item35 条款27: 要求或禁止对象产生于heap中
一 要求对象产生在heap中 阻止对象产生产生在non-heap中最简单的方法是将其构造或析构函数声明在private下,用一个public的函数去调用起构造和析构函数 class UPNumber ...
- IGMP技术总结
转载自:IGMP技术总结 本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三二一.小鱼)相关研究.学习内容所做的笔记,欢迎广大朋友指正! 1. IGMP ...
- [Shell]bash的良好编码实践
最好的bash脚本不仅可以工作,而且以易于理解和修改的方式编写.很多好的编码实践都是来自使用一致的变量名称和一致的编码风格.验证用户提供的参数是否正确,并检查命令是否能成功运行,以及长时间运行是否能保 ...
- MPAndroidChart Wiki(译文)~Part 2
7. 填充数据 这一章节将讲解给各式各样的图表设置数据的方法. 7.1 LineChart(线形图) 想给图表添加数据,使用如下方法: public void setData(ChartData da ...
- Echart--百度地图(散点图)
参考:http://blog.csdn.net/xieweikun7/article/details/52766676 1.首先,下载嘛 Echarts http://echarts.baidu.co ...
- keras channels_last、preprocess_input、全连接层Dense、SGD优化器、模型及编译
channels_last 和 channels_first keras中 channels_last 和 channels_first 用来设定数据的维度顺序(image_data_format). ...
- [svn]显示日志很慢 点击文件查看更改记录也贼慢
特此记录,防止以后忘记. 解决办法: 在 C:\Windows\System32\drivers\etc (win7) 中加入 即可 亦或将代码的url中pc名字改为ip地址也可以解决问题 对文件夹点 ...
- 原生js实现div拖拽+按下鼠标计时
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style> ...
- POJ1201 Intervals【差分约束系统】
Description You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a p ...
- hexo个人博客搭建
遇见西门的个人博客 https://www.simon96.online/ 内容详细!