uva 10739 dp

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

和昨天的那个回文串几乎一样只是加了条件限制,可以随意增删以及替换。

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<vector>
 6 #include<stack>
 7 using namespace std;
 8 #define inf 0x3f3f3f3f
 9 int f[1005][1005];
10 char s[1005];
11 int main()
12 {
13     int N=1,M,i,j,k,t;
14     cin>>t;
15     for(int xx=1;xx<=t;++xx)
16     {
17         cin>>(s+1);
18         int n=strlen(s+1);
19         memset(f,0,sizeof(f));
20         for(int len=2;len<=n;++len)
21         {
22             for(i=1,j=len;j<=n;++i,++j)
23             {
24                 f[i][j]=inf;
25                 if(s[i]==s[j]) f[i][j]=f[i+1][j-1];
26                 f[i][j]=min(f[i][j],min(min(f[i][j-1]+1,f[i+1][j]+1),f[i+1][j-1]+1));
27             }
28         }
29         printf("Case %d: %d\n",xx,f[1][n]);
30     }
31     return 0;
32 }
时间: 2024-10-17 10:28:09

uva 10739 dp的相关文章

uva 10739 String to Palindrome (dp)

uva 10739 String to Palindrome In this problem you are asked to convert a string into a palindrome with minimum number of operations. The operations are described below: Here you'd have the ultimate freedom. You are allowed to: Add any character at a

区间DP UVA 10739 String to Palindrome

题目传送门 1 /* 2 题意:三种操作,插入,删除,替换,问最少操作数使得字符串变成回文串 3 区间DP:有一道类似的题,有点不同的是可以替换,那么两端点不同的时候可以替换掉一个后成回文, 4 即dp[j+1][k-1] + 1,还有这道题没有要求打印 5 */ 6 /************************************************ 7 * Author :Running_Time 8 * Created Time :2015-8-17 15:45:22 9 *

uva 1401 dp+Trie

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=4147 题意:给定一个字符串,以及若干单词,求有几种方式能用单词组成字符串 我先是dp方程推得有问题不知怎么修改搞得卡了很久,然后就是数组开得太小一直RE trie数组大小=单词个数*单词长度  dp[i]为以str[i]开头的后缀的ans,dp[i]=segma(

UVA 10739 String to Palindrome(DP)

In this problem you are asked to convert a string into a palindrome with minimum number of operations. The operations are described below: Here you'd have the ultimate freedom. You are allowed to: Add any character at any position Remove any characte

uva 1291 dp

UVA 1291 - Dance Dance Revolution 有一个跳舞机.原点为0,有四个方向,上左下右,分别标成(1234),初始玩家两只脚站在 0 位置,跳舞机会给出一串数字,玩家要按照顺序踩下四个方向的数字.移动脚会消耗玩家的能量,从0位置移动到四个方向消耗2点能量,从一个方向移动到另一个相邻的方向消耗3点能量,从一个方向移动到相反方向消耗4点能量,原点踩一下消耗1点能量.问你踩出这串数子最少要花多少能量. 根据能量消耗关系,我们可以发现当前两只脚踩的方向才是重点.然而要记录两只脚

uva 1424 dp

UVA 1424 - Salesmen 给出一副图,并且给出nhn走过的路径记入,路径可能是错的,问最少修改几个地方可以使得路径是正确的. dp[i][j] 表示修改第i个位置为j点的前i个位置的最小修改次数. dp[i][j] = min(dp[i-1][k] + (j == a[i])); {w[k][j] == true 即存在路径k~j} 然后再最后一个点找一个最小值. #include <cstdio> #include <cstring> #include <io

uva 10534 dp

UVA 10534 - Wavio Sequence 定义一种 Wavio 的序列.其长度为2*n+1,前n+1严格递增,后n+1个严格递减. 求在给的序列中找一个最长的 Wavio 子序列.输出长度. 正向LIS求出每个点以该点为结尾的最长上升子序列长度p[i],然后反向LIS求出以该点位开头的最长递减子序列长度q[i]. 然后枚举 Wavio 子序列的中点,该店的 Wavio 长度为 2 * min(p[i], q[i]) - 1; #include <cstdio> #include &

UVA 147- Dollars(dp之子集和问题)

题目地址:UVA 147 题意:给定11种面值分别为100元, 50元, 20元, 10元, and 5元 and 2元, 1元, 50分, 20分, 10分 and 5分的钱,现在给定一个钱数,求出可以组成的种类数. 思路:子集和问题:S={ x1 , x2 ,-, xn }是一个正整数的集合,c是一个正整数.子集和问题判定是否存在S的一个子集S1,使得s1中的各元素之和等于c. 最突出的事例就是硬币计数问题:设c(i,j)是a1,a2--ai中包含ai且数和为j的方案数,显然目标是求c(n,

uva 11404 dp

UVA 11404 - Palindromic Subsequence 求给定字符串的最长回文子序列,长度一样的输出字典序最小的. 对于 [l, r] 区间的最长回文串,他可能是[l+1, r] 和[l, r-1]两个区间的结果.或者当s[l] == s[r]时,区间[l+1, r-1]的结果再加上以s[l], s[r]为首尾的子序列. dp[l][r] = ans(dp[l][r-1], dp[l+1][r], s[l] + dp[l+1][r-1] + s[r]) dp存的是子序列,即一个s