![](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 · 685 阅读 · 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 · 740 阅读 · 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 · 756 阅读 · 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 · 727 阅读 · 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 · 811 阅读 · 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 · 705 阅读 · 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 · 682 阅读 · 0 评论 -
pku 1631 Bridging signals nLogn效率的最长上升子序列
题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1631#include #include #define maxn 40001int 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 · 682 阅读 · 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 · 708 阅读 · 0 评论