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;
}
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;
}
相关文章推荐
- UVA 11404 - Palindromic Subsequence(dp)
- uva 11404(dp)
- UVa 11404 - Palindromic Subsequence(最大回文串,区间DP)
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
- UVa 11404 - Palindromic Subsequence DP LCS---------无限WA
- UVa 11404 - Palindromic Subsequence DP LCS---------无限WA
- UVA11404-----Palindromic Subsequence-----DP之LCS
- UVa 11404 回文子序列 LPS
- UVA 11404 简单LCS模型DP 字典序比较
- uva 11404 dp
- LPS UVA 11404 Palindromic Subsequence
- UVA 11404-Palindromic Subsequence(DP)
- Palindromic Subsequence - UVa 11404 dp
- UVA 11404 - Palindromic Subsequence(LCS和DP两种做法)
- uva 11404 dp
- uva 11404 - Palindromic Subsequence(dp)
- UVa 11404 - Palindromic Subsequence (最长回文子序列 DP)
- Uva1585-Score-dp
- UVa 1638 Pole Arrangement (递推或DP)
- UVA - 11137 Ingenuous Cubrency[背包DP]