![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 77
xtf__moji
这个作者很懒,什么都没留下…
展开
-
POJ 1088 比较有意思的动态规划
<br />注意2种方法的差别,递归的使用<br />#include<iostream> using namespace std; int r,c; int xd[101][101]; int len[101][101]; //上下左右 int pos[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; bool ok(int i,int j){ if(1 <= i && i <= r && 1 <= j && j <= c) return true;原创 2010-08-13 00:54:00 · 675 阅读 · 0 评论 -
pku 2479
http://acm.pku.edu.cn/JudgeOnline/problem?id=2479思路:基础: 最大子段和问题给定N个整数(可能为负)组成的序列a1, a2, a3, ..., aN,求子段ai, a(i+1), ... , aj的和的最大值非常典型的动态规划,状态迁移方程: f(i) = max(ai, f[i-1]+ai), f(i)表示以ai结尾的最大子段和据此我们可以得到O(n)的求解算法PKU 2479与2593这两题其实是同一个问题(买一送一),都是上述最大子段和问题的原创 2010-08-13 10:19:00 · 734 阅读 · 0 评论 -
pku 2192 Zipper
<br />题目链接:<br />http://acm.pku.edu.cn/JudgeOnline/problem?id=2192<br /> <br />采用动态规划的方法,类似LCS<br />f(i,j)表示是s1前i个字符,s2前j个字符能否组成s3前i + j个字符<br />f(0,0) = 0;<br />f(i,j) = (f(i - 1,j) && s1[i - 1] == s3[i + j - 1] && i >= 1) || f(i,j - 1) && s2[j - 1] == s3原创 2010-08-19 21:06:00 · 749 阅读 · 0 评论 -
入门DP pku 1163 The Triangle
题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1163题目简单,主要是在递归的时候实现了记忆功能.而dp的实现是很容易的.重点是这2者的联系.逆向关系#include #include #define max 101 #define MAX(x,y) (x > y ? x : y) int tri[max][max]; int sum[max][max]; int f(int i,int j,int n){ if(原创 2010-08-27 01:02:00 · 720 阅读 · 0 评论 -
pku 1080 Human Gene Functions
<br />题目:<br />http://acm.pku.edu.cn/JudgeOnline/problem?id=1080<br />#include <iostream> using namespace std; char a[105],b[105]; int x[105],y[105]; int score[200][200]; int table[5][5] = { 5,-1,-2,-1,-3, -1,5,-3,-2,-4, -2,-3,5,-2,-2, -1原创 2010-08-29 23:02:00 · 802 阅读 · 0 评论 -
pku 1159 Palindrome 使用滚动数组
<br />使用滚动数组<br /> <br />题目:<br />http://acm.pku.edu.cn/JudgeOnline/problem?id=1159<br /> <br />#include <stdio.h> #include <string.h> #define max 5002 #define MAX(x,y) (x > y ? x : y) //滚动数组 short g[2][max]; char sa[max]; char sb[max]; int mai原创 2010-08-29 23:04:00 · 700 阅读 · 0 评论 -
pku 3356 AGTC
<br />题目:<br />http://acm.pku.edu.cn/JudgeOnline/problem?id=3356<br /> <br />#include "stdio.h" //f(i,j)表示字符串A的前i个字符到字符串B的前j个字符匹配所需的最小改变步数 int f[1002][1002]; int min(int a,int b,int c) { int temp; temp = a <= b ? a : b; return原创 2010-08-29 22:57:00 · 675 阅读 · 0 评论 -
pku 1631 Bridging signals nLogn效率的最长上升子序列
题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1631#include #include #define maxn 40001 int num[maxn]; //B[i]表示序列长度为i的所有序列的末尾元素的最小值 int B[maxn]; //opt[i]表示以第i个元素结尾的序列中的最长上升子序列的长度 int opt[40001]; int main(){ freopen("data.txt","r",stdin);原创 2010-08-29 22:59:00 · 675 阅读 · 0 评论 -
hrbeu 1229 网络热身赛的一道DP Sum Of SubRectangular Parallelepiped(数字长方体)
好辛苦啊...热身赛的时候看错题目,没做出来..今天实训逃回来,一个下午,WA了31次!。。。#include using namespace std; /* [y1y2y3..yn] 对于一维来说:y就是该列的值 对于二维来说:y是一个可变长度的向量 对于三维来说:y是一个面 如果所有的情况都在一个数组里进行DP的话,那么本题需要开个5维数组... 5维的话是5次方,很明显是不可能的事情. 所以本体的策略是时间换空间. 由于数组不能开大,那么只能是每次计算一个矩形后,对使用的数组原创 2010-09-10 18:19:00 · 702 阅读 · 0 评论