您的位置:首页 > 产品设计 > UI/UE

UVA - 11404 Palindromic Subsequence (LPS,dp)

2017-08-27 10:22 405 查看
原题链接:

https://vjudge.net/problem/UVA-11404

区间dp求LPS

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
#include <deque>
#include <string>
#include <cmath>
#include <vector>
#include <utility>
#include <set>
#include <map>
#include <sstream>
#include <climits>
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#define pi acos(-1.0)
#define INF 2147483647
using namespace std;
typedef long long ll;
typedef pair <int,int > PP;
const int N = 1005;
struct state {
string ans;
int val;
bool operator >(const state& a) {
if (this->val != a.val) return this->val > a.val;
return this->ans < a.ans;
}
} dp

;

char str
;

int main () {
while (scanf("%s", str+1) == 1) {
int n = strlen(str+1);
for (int i = n; i >= 1; i--) {
dp[i][i].val = 1;
dp[i][i].ans = str[i];
for (int j = i+1; j <= n; j++) {
if (str[i] == str[j]) {
dp[i][j].val = dp[i+1][j-1].val + 2;
dp[i][j].ans = str[i] + dp[i+1][j-1].ans + str[j];
} else {
if (dp[i+1][j] > dp[i][j-1]) {
dp[i][j].val = dp[i+1][j].val;
dp[i][j].ans = dp[i+1][j].ans;
} else {
dp[i][j].val = dp[i][j-1].val;
dp[i][j].ans = dp[i][j-1].ans;
}
}
}
}
cout << dp[1]
.ans << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: