poj1159
来源:互联网 发布:wind中国金融数据库 编辑:程序博客网 时间:2024/06/05 16:41
动态规划
刚开始时稍稍没有头绪,但认真想的话这个题还是求最长公共子序列上。所有的代码围绕数据的如何存储展开的,数据的如何存储决定了以后如何对数据的操作,同时复杂度的大小,本题使用滚动数组,这也和动态规划的性质有关,此时的状态只与前一个状态有关,而与更前的状态无关,故只设置动态二维数组时,只设两个行即可,用%2来进行滚动。状态方程确立好。
#include <iostream>#include <memory.h>using namespace std;int max(int a,int b){ if(a >= b) return a; else return b;}int main(){ int n; while(cin >> n) { char *s1 = new char[n+1]; char *s2 = new char[n+1]; int **p = new int*[n+1]; p[0] = new int[n + 1]; p[1] = new int[n + 1]; p[0][0] = p[1][0] = 0; for(int i = 1;i <= n;i ++) { p[0][i] = p[1][i] = 0; char temp; cin >> temp; s1[i] = s2[n + 1 - i] = temp; } int length = -1; for(int i = 1;i <= n;i ++) for(int j = 1;j <= n;j ++) { if(s1[i] == s2[j]) p[i%2][j] = p[(i-1)%2][j-1] + 1; else p[i%2][j] = max(p[(i-1)%2][j],p[i%2][j-1]); if(length < p[i%2][j]) length = p[i%2][j]; } cout << n - length << endl; delete s1; delete s2; delete []p; } return 0;}
0 0
- poj1159
- poj1159
- poj1159
- poj1159
- poj1159
- POJ1159
- poj1159
- poj1159
- poj1159
- POJ1159
- poj1159
- POJ1159 Palindrome
- poj1159 DP
- poj1159 - Palindrome
- POJ1159 Palindrome
- POJ1159--Palindrome
- POJ1159 Palindrome
- poj1159 LCS
- GTK Labels
- 安卓TextView学习笔记
- Android源代码目录结构解释
- python中类的域和对象
- GTK编程基础----状态栏、文本输入构件、组合框
- poj1159
- java io+序列化
- 简明Vim练级攻略
- Roman to Integer
- 批处理命令大全
- FoucusProject 焦点事件
- ubuntu 安装GTK
- 小:英文字母转为小写;微我时物体变小20140718
- 博弈入门小结2