poj3280:http://poj.org/problem?id=3280
简单的多子问题多选择dp问题:
dp[i][j]表示字符下标为i到j的子字符串构成回文的最小消费,构成解的子问题有以下两种情况:
1、str[i]!=str[j],则最小费用为dp[i][j]=min{dp[i+1][j]+cost(str[i]),dp[i][j-1]+cost[str[j]]},其中cost(char),是取得增加和删除该字符的费用较小值;
2、str[i]==str[j],则最小费用为dp[i][j]=min{dp[i][j],dp[i+1][j-1]},保证此时dp[i][j]已经求出。
简单的多子问题多选择dp问题:
dp[i][j]表示字符下标为i到j的子字符串构成回文的最小消费,构成解的子问题有以下两种情况:
1、str[i]!=str[j],则最小费用为dp[i][j]=min{dp[i+1][j]+cost(str[i]),dp[i][j-1]+cost[str[j]]},其中cost(char),是取得增加和删除该字符的费用较小值;
2、str[i]==str[j],则最小费用为dp[i][j]=min{dp[i][j],dp[i+1][j-1]},保证此时dp[i][j]已经求出。
#include <iostream> #include <fstream> #define MAX_DP 2011 using namespace std; char str[MAX_DP]; unsigned int dp[MAX_DP][MAX_DP]; int cost[26]; unsigned int min(unsigned int a,unsigned int b) { if(a>=b) return b; else return a; } unsigned int dodp(unsigned int start,unsigned int end) { if(start>=end) return 0; if(dp[start][end]) return dp[start][end]; dp[start][end]=min(dodp(start+1,end)+cost[str[start]-'a'],dodp(start,end-1)+cost[str[end]-'a']); if(str[start]==str[end]) dp[start][end]=min(dp[start][end],dodp(start+1,end-1)); return dp[start][end]; } int main() { unsigned int m,n; memset(cost,0,sizeof(cost)); memset(dp,0,sizeof(dp)); cin>>n>>m; cin>>str; for(int i=0;i<n;i++) { char temp; unsigned int a,b; cin>>temp; cin>>a>>b; cost[temp-'a']=min(a,b); } cout<<dodp(0,m-1)<<endl; return 0; }
发表评论
-
2011清华考研机试题2
2011-08-09 14:56 935http://ac.jobdu.com/problem.php ... -
2011清华考研机试题1
2011-08-09 14:40 675题目描述 http://ac.jobdu.com/proble ... -
考研清华2011复试机考第三题
2011-08-09 13:51 1534题目描述 在某条线路上有N个火车站,有三种距离的路程,L1, ... -
poj3259 spfa解法
2011-08-08 19:59 1390同上题,不过改的spfa算法,注意每个节点进入队列的次数至多为 ... -
poj3259 bellman水题
2011-08-08 17:04 996poj3259http://poj.org/problem?i ... -
acm题目常用的预处理
2011-08-08 15:26 1201#include<iostream> #in ... -
poj1860
2011-08-08 14:06 739poj1860http://poj.org/problem?i ... -
water~9
2011-08-06 18:01 461poj2109http://poj.org/problem?i ... -
water~8
2011-08-06 17:22 647poj2027http://poj.org/problem?i ... -
water~7
2011-08-06 17:15 601poj1328http://poj.org/problem?i ... -
water~6
2011-08-06 14:27 758poj1088http://poj.org/problem?i ... -
water~5
2011-08-06 14:24 661poj1003http://poj.org/problem?i ... -
water~4
2011-08-06 14:09 699poj1004http://poj.org/problem?i ... -
water~3
2011-08-06 13:59 565poj2159http://poj.org/problem?i ... -
water~2
2011-08-06 12:10 564poj3299http://poj.org/problem?i ... -
water~1
2011-08-06 10:35 671poj1503http://poj.org/problem?i ... -
POJ3253
2011-08-04 13:36 810poj3253:http://poj.org/problem? ...
相关推荐
### poj dp总结:动态规划分类 #### 概述 动态规划(Dynamic Programming,简称DP)是一种在计算机科学和数学中广泛使用的算法策略,用于解决最优化问题。它通过将复杂问题分解为较简单的子问题来求解,并利用这些...
【标题】"POJ题目简单分类(ACM)" 涉及的知识点: 【描述】中的"学习起来更系统,更清爽"暗示了本话题旨在为ACM竞赛初学者提供一个有条理的学习路径。 【标签】"POJ 分类"表明我们将探讨的是基于POJ(Problemset On...
* 较为复杂的动态规划:例如 poj1191、poj1054、poj3280、poj2029、poj2948、poj1925、poj3034。 数学 1. 组合数学: * 加法原理和乘法原理。 * 排列组合。 * 递推关系:例如 poj3252、poj1850、poj1019、poj...
* 型如下表的简单 DP:型如下表的简单 DP 是指解决问题的简单 DP 算法,如 poj3267、poj1836、poj1260、poj2533。 * 计算几何学:计算几何学是指解决问题的计算几何学算法,如 poj2031、poj1039。 六、数学 数学...
- 简单DP:如`poj3267, poj1836`。 - **数学** - 组合数学:如`POJ3252, poj1850`。 - 数论:如`poj2635, poj3292`。 #### 第二阶段中级训练计划 #### 第3周至第4周(共85题) - **进阶算法** - C++标准模版...
5. **动态规划**和**数学**:poj1837、poj1276是简单的动态规划问题,poj3267、poj1836等进一步强化了DP,poj3252、poj1850等则涉及组合数学,poj2635、poj3292等训练了数论知识。 **中级阶段**则更加强调复杂算法...
【描述】描述简单,表明这是一道与棋盘相关的编程挑战,可能涉及到棋类游戏的规则或逻辑。由于没有给出详细的题目描述,我们可以从一般编程竞赛的角度来推测其可能的内容。通常这类问题会要求参赛者编写程序解决某个...
2. **线性DP**:包括单变量和二维DP问题,如表格形式的DP,如POJ3267、1836、1260、2533、3176、1080、1159和3176。 ### 数学 1. **组合数学**:学习加法原理、乘法原理、排列组合以及递推关系,如POJ3252、1850、...
动态规划是解决优化问题的一个数学方法,其基本思想是将复杂的问题分解为更简单的子问题,通过递推的方式,逐步得到问题的最优解。动态规划是计算机科学、运筹学和经济学等领域中一个重要的算法框架。 接着,具体...
简单、模拟题是 POJ 上的基础题目,它们通常不需要复杂的算法设计和实现。以下是一些推荐的题目: * 1001 Exponentiation * 1002 487-3279 * 1003 Hangover * 1701 Dissatisfying Lift * 2301 Beat the Spread! * ...
在POJ(Programming Online Judge)平台上,题目被标记为“简单题”,表明它们适合初学者或作为基础练习。 在提供的部分题目列表中,我们能看到一些常见的算法类别,如动态规划(DP)、图论、字符串处理、最短路径...
* 类似表的简单 DP:poj3267, poj1836, poj1260, poj2533 * 最长公共子序列:poj3176, poj1080, poj1159 * 最优二分检索树问题 六、数学 * 组合数学: + 加法原理和乘法原理 + 排列组合 + 递推关系 - poj3252...
(2) 简单DP:poj3267, poj1836, poj1260, poj2533 (3) 其他DP问题: 六、中级算法 本部分涵盖了中级算法,包括C++的标准模版库的应用、较为复杂的模拟题的训练、差分约束系统的建立和求解、最小费用最大流、双连通...
例如,POJ1837和POJ1276是背包问题的典型例题,而POJ3267和POJ1836则是简单DP的经典例题。 数学部分涵盖了组合数学、数论和计算方法三方面。例如,POJ3252和POJ1850是组合数学的代表题,而POJ2635和POJ3292则是数论...
2. **动态规划 (DP)** - 动态规划是一种通过将复杂问题分解成简单的子问题,并存储子问题的解以避免重复计算的策略。例如,在解决背包问题时,我们可以使用动态规划来找出最优的物品组合。 3. **贪心算法** - 贪心...
POJ(Problemset Online Judge)是一个在线编程竞赛平台,提供了大量的编程题目供参赛者练习和比赛。这个平台上的题目按照不同的主题和难度进行了分类,帮助参赛者有针对性地提高编程技能和算法理解。以下是一些主要...
2. **动态规划(DP)与记忆化搜索**: 动态规划是解决具有重叠子问题和最优子结构特征的问题的有效方法,如背包问题、最长公共子序列等。记忆化搜索是动态规划的一种优化,用于避免重复计算。如1037、1125、1458等...