poj_1458_二维DP(LCS)

今天完成了三道题目,总结一下:

1: Length of last word(细节实现题)

此题有一些细节需要注意(比如 “a_ _” 最后一个单词是a, 而不是遇到空格就直接算成没有),别的基本就是模拟了。

 1 class Solution {
2 public:
3 int lengthOfLastWord(const char *s) {
4 string str = s;
5 if(str.empty()) return 0;
6 int index;
7 // 从后向前扫描到第一个不是空格的字符
8 for(index = str.size()-1;index>=0;index--)
9 {
10 if(str[index]!=‘ ‘)
11 break;
12 }
13 if(index<0) return 0;
14 int i;
15 //从此字符开始,往前遇到空格停止计算或者把字符串扫描完
16 for(i=index;i>=0;i--)
17 {
18 if(str[i] == ‘ ‘)
19 break;
20 }
21 return (index-i);
22 }
23 };

2. Trapping Rain Water

Given n non-negative integers representing an elevation
map where the width of each bar is 1, compute how much water it is able to trap
after raining.

For example, 
Given [0,1,0,2,1,0,1,3,2,1,2,1],
return 6.

这道题目是直方图类题目,贴出的解法是book上的,两轮扫描,第一轮记录左前缀最大值和右前缀最大值; 第二轮扫描,对每个位置,可以积的水是

max(min(max_left,max_right)-height,0)  height 是当前位置的格子高度。
这道题目应该算是一道技巧题了。

 1 class Solution {
2 public:
3 int trap(int A[], int n) {
4 if(n<2) return 0;
5 int* left_max = new int[n];
6 int* right_max = new int[n];
7
8 // Two pass algorithm
9 left_max[0] = A[0];
10 right_max[n-1] = A[n-1];
11 for(int i=1;i<n;i++)
12 {
13 left_max[i] = max(left_max[i-1],A[i]);
14 right_max[n-1-i] = max(right_max[n-i],A[n-1-i]);
15 }
16 int water = 0;
17 for(int i=0;i<n;i++)
18 {
19 water += max(min(left_max[i],right_max[i])-A[i],0);
20 }
21 return water;
22
23 }
24 };

View
Code

3.Valid Parentheses

Given a string containing just the
characters ‘(‘‘)‘‘{‘‘}‘‘[‘ and ‘]‘,
determine if the input string is valid.

The brackets must close in the correct
order, "()" and "()[]{}" are all
valid but "(]" and "([)]" are
not.

简单的括号匹配题,一般都是用栈来实现。实现细节要注意,错误都犯在控制变量的初始化上了(test 变量每次set成true之后,没有重新初始化)

 1 class Solution {
2 public:
3 bool isValid(string s) {
4 stack<int> st;
5 bool test=false;int num;
6 for(int i=0;i<s.size();i++)
7 {
8 switch (s[i])
9 {
10 case ‘(‘: num = 1;st.push(num);break;
11 case ‘[‘: num = 2;st.push(num);break;
12 case ‘{‘: num = 3;st.push(num);break;
13 case ‘)‘: num = 1;test = true;break;
14 case ‘]‘: num = 2;test =true;break;
15 case ‘}‘: num = 3;test = true; break;
16 }
17 if(test)
18 {
19 if(st.empty() || st.top()!=num) return false;
20 else st.pop();
21 test =false;
22 }
23 }
24 if(st.empty()) return true;
25 else return false;
26 }
27 };

时间: 2024-08-28 14:01:13

poj_1458_二维DP(LCS)的相关文章

HDU 4901 The Romantic Hero(二维dp)

题目大意:给你n个数字,然后分成两份,前边的一份里面的元素进行异或,后面的一份里面的元素进行与.分的时候按照给的先后数序取数,后面的里面的所有的元素的下标一定比前面的大.问你有多上种放元素的方法可以使得前面异或的值和后面与的值相等. dp[x][y] 表示走到第x步,得到y这个数字一共有多少种方法. 但是需要注意这里得分一下,不能直接用dp数组存种数,你需要分一下从上一层过来的次数,和这一层自己可以到达的次数.然后取和的时候前后两个集合的种数进行乘法,注意边乘边取余. 顺便给一组数据: 4 3

二维dp(O(N^3)实现) zoj3230

1 #include<iostream> 2 #include<string.h> 3 #include<stdio.h> 4 #define maxn 125 5 using namespace std; 6 7 int cost[maxn][maxn],w[maxn][maxn]; 8 int dp[maxn][maxn]; 9 int N,M; 10 int main(){ 11 while(cin>>N>>M){ 12 if (N==0

hoj_10014_二维DP

The Triangle Time Limit: 1000ms, Special Time Limit:2000ms, Memory Limit:32768KB Total submit users: 952, Accepted users: 860 Problem 10014 : No special judgement Problem description 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1) Figure 1 shows a number tr

XTU1168:Alice and Bob(二维DP)

摘要:Dota(Defence of the Ancients,远古的守护), 是指基于魔兽争霸3:冰封王座(暴雪娱乐公司出品)的多人即时对战自定义地图,可支持10个人同时连线游戏.Dota以对立的两个小队展开对战,通常是5v5,游戏目的是守护自己的远古遗迹(近卫方的生命之树.天灾方的冰封王座),同时摧毁对方的远古遗迹.DotA是目前唯一被暴雪娱乐公司官方认可的魔兽争霸RPG.Dota在大学生中的风靡程度令人咂舌,而随着玩家对游戏的理解深入,本身存在于游戏中的许多数学模型被挖掘出来进行研究.游戏

HDU 5074 Hatsune Miku(简单二维dp)

题目大意:给你一些音符之间的联系,给你一个串,让你求出这个串的最大值.-1的时候可以任意替代,其他情况必须为序列上的数. 解题思路:简单二维dp,分情况处理就可以了啊. Hatsune Miku Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 637    Accepted Submission(s): 458 Problem De

(review)zoj4800 二维dp 状态转移很灵活

1 #include<iostream> 2 #include<stdio.h> 3 4 using namespace std; 5 6 double dp[10005][125]; 7 double p[125][125]; 8 int pk[10005]; 9 10 int N,M; 11 12 double fmax(double a,double b){ 13 if(a-b>0) return a;else return b; 14 } 15 int main(){

NOJ1060 接苹果 二维DP

题目描述 很少有人知道奶牛爱吃苹果.农夫约翰的农场上有两棵苹果树(编号为1和2), 每一棵树上都长满了苹果.奶牛贝茜无法摘下树上的苹果,所以她只能等待苹果 从树上落下.但是,由于苹果掉到地上会摔烂,贝茜必须在半空中接住苹果(没有人爱吃摔烂的苹果).贝茜吃东西很快,她接到苹果后仅用几秒钟就能吃完.每一分钟,两棵苹果树其中的一棵会掉落一个苹果.贝茜已经过了足够的训练, 只要站在树下就一定能接住这棵树上掉落的苹果.同时,贝茜能够在两棵树之间 快速移动(移动时间远少于1分钟),因此当苹果掉落时,她必定站

洛谷p1732 活蹦乱跳的香穗子 二维DP

今天不BB了,直接帖原题吧  地址>>https://www.luogu.org/problem/show?pid=1732<< 题目描述 香穗子在田野上调蘑菇!她跳啊跳,发现自己很无聊,于是她想了一个有趣的事情,每个格子最多只能经过1次,且每个格子都有其价值 跳的规则是这样的,香穗子可以向上下左右四个方向跳到相邻的格子,并且她只能往价值更高(这里是严格的大于)的格子跳. 香穗子可以从任意的格子出发,在任意的格子结束, 那么她最多能跳几次? 输入输出格式 输入格式: 第一行n,m,

二维dp

原题http://acm.hdu.edu.cn/showproblem.php?pid=3127 WHUgirls Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 2050    Accepted Submission(s): 780 Problem Description There are many pretty girls i