动态规划***************
文章平均质量分 64
「已注销」
我的目标 离我还有多远我的梦想 有点遥不可及我要用十倍苦心做最突出一个我不能退缩 不管路多艰难 我都要努力我要靠自己的双手去做自己喜欢做的事我要靠自己的努力去我想去的地方旅游我还年轻 我还可以去奋斗
展开
-
hdu3466-Proud Merchants
Proud Merchants 按照q-p从小到大排序,然后01背包。 至于按照q-p从小到大排序比较难想到。q-p其实就是不更新的范围,不更新的范围从小到大递增时就不会影响后面的DP了。 // File Name: hdu3466.cpp // Author: rudolf // Created Time: 2013年04月21日 星期日 21时17分35秒 #include原创 2013-04-22 13:16:16 · 977 阅读 · 0 评论 -
矩阵链乘法
Description 给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2 ,…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。 Input 有N个矩阵连乘,用一行有n+1个数数组表示,表示是n个矩阵的行及第n个矩阵的列,它们之间用空格隔开. Output 你的输出应该有C行,即每组测试数据的输出占一行,它是原创 2013-04-24 15:14:41 · 1062 阅读 · 0 评论 -
hdu2067-小兔的棋盘
http://acm.hdu.edu.cn/showproblem.php?pid=2067 如图所示 , 矩阵关于y = - x 即 x == y对称, 因此只需要算出其中的一半,然后乘二即可 ,第一行所有的数据均只能由左边传递过来 ,因此dp[ 0 ][ j ] =1 ; 其他的路径均可以通过上和左边传递过来,因此dp[ I ][ j ] = dp[ i - 1][ j ] + dp[原创 2013-05-21 18:46:02 · 1270 阅读 · 0 评论 -
hdu2082-找单词
http://acm.hdu.edu.cn/showproblem.php?pid=2082 背包问题,开个二位数组,第一维表示第几个字母数,第二维表示分数,然后统计计算出题目要求的小于50的即可; 最后从1~50中的统计个数 #include "stdio.h" #include "string.h" #include "stdlib.h" #include "math.h" #inc原创 2013-05-22 13:12:49 · 1421 阅读 · 0 评论 -
hdu1081-To The Max
http://acm.hdu.edu.cn/showproblem.php?pid=1081 DP,最大矩阵和,首先将横坐标的数值,分别求和存储在二维数组中,然后使用三个for循环,第一二层分别表示第I 横层 ,和第j 横层,然后做差,就求出了纵坐标的和,当sum〉0就由k 向右累加; #include #include #include using namespace std ; int原创 2013-06-09 14:33:41 · 1257 阅读 · 0 评论 -
hdu1025-Constructing Roads In JGShining's Kingdom
http://acm.hdu.edu.cn/showproblem.php?pid=1025 最长上升子序列(长度) #include #include #include using namespace std; int n ; const int maxn = 500005 ; int dp[ maxn ] , a[ maxn ]; int LIS(int n ) { int low原创 2013-05-31 13:39:47 · 955 阅读 · 0 评论 -
hdu1058-Humble Numbers
http://acm.hdu.edu.cn/showproblem.php?pid=1058 DP #include #include #include #include #include using namespace std; #define INT __int64 INT num[ 6000 ] ; int min( INT a , INT b , INT c , INT d )原创 2013-07-15 19:46:54 · 859 阅读 · 0 评论 -
zoj1503-One Person "The Price is Right"
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=503 // 题目大意:每个人允许猜 G 次,有 L 生命线。猜低或猜高了,耗费一次猜得机会,猜高了,还 // 会浪费一生命线。 // dp // 先从搜索考虑。设f(g,l)表示有g次机会,l条生命线时可以猜到的最大价格原创 2013-07-17 00:10:28 · 1847 阅读 · 0 评论 -
hdu2955-Robberies
Robberies 挺有意思的题目,需要点转化。01背包:每个物品代价是每个银行钱的数目,物品的价值是在该银行不被抓的概率 (1-被抓概率),背包容量是所有银行钱的总和。01背包求dp[i]表示获得i的钱不被抓的最大概率。最后从大到小枚举出 dp[i]>=(1-P)这个i就是答案了。关键在于理解题目意思。。。另外需要活学活用,01背包中不可以生搬硬套,这里变成*weight; // Fil原创 2013-04-20 19:44:55 · 771 阅读 · 0 评论 -
hdu1231-最大连续子序列
http://acm.hdu.edu.cn/showproblem.php?pid=1231 dp入门题 #include #include #include #include #include #include #include using namespace std; #define MAX 10005 int main() { int dp[ MAX ] ; int n ; w原创 2013-07-25 22:47:15 · 979 阅读 · 0 评论 -
hdu1069-最长连续上升子序列
http://acm.hdu.edu.cn/showproblem.php?pid=1069 #include #include #include #include #include #include #include #include using namespace std; #define MAX 2005 struct node { int x , y , ans ; }edge[原创 2013-07-26 08:33:42 · 1075 阅读 · 0 评论 -
poj1036-dp
http://poj.org/problem?id=1036 题目分析: 由题目很容易就能想到这道题目是DP题目。 当然,它的DP方程也不难得到: 定义状态:d[i,j] 表示在时间t=i且门状态为j的时候所能取得的最大幸运值。 那么相应的状态转移方程为 d[i,j] =max(d[i-1,j-1],d[i-1,j],d[i-1][j+原创 2013-07-27 09:54:46 · 1129 阅读 · 0 评论 -
wiki1169-传纸条(dp)
http://wikioi.com/problem/1169/ 四维数组和三维数组; #include #include #include #include #include #include #include using namespace std; int num[ 55 ][ 55 ] ; int dp[ 55 ][ 55 ][ 55 ][ 55 ] ; int main() {原创 2013-08-04 11:15:35 · 1886 阅读 · 0 评论 -
通过金矿模型介绍动态规划
对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你产生错误理解的地方,让你难得读懂的地方,请跟贴指出,谢谢! ----第一节转载 2013-08-08 11:34:51 · 903 阅读 · 0 评论 -
线段覆盖2(动态规划)
http://wikioi.com/problem/3027/ #includehttp://wikioi.com/problem/3027/eam> #include #include #include #include #include #include using namespace std; #define maxn 1005 int dp[ maxn ] ; struct no原创 2013-08-08 23:29:26 · 1759 阅读 · 0 评论 -
线段覆盖(动态规划)
http://wikioi.com/problem/1214/ #include #include #include #include #include #include #include using namespace std; #define maxn 1005 int dp[ maxn ] ; struct node { int left , right , value ; }edg原创 2013-08-08 23:27:17 · 2270 阅读 · 0 评论 -
France '98
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30506#problem/H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #原创 2013-09-03 14:56:15 · 983 阅读 · 0 评论 -
Maximum Submatrix
最小01矩阵,Dp求解;同求最大子矩阵和类似,采用行/列存储总长度/和; #include #include #include using namespace std; #define MAXN 2010 int h[MAXN],r[MAXN],l[MAXN]; int map[MAXN][MAXN]; char str[2]; int n,m; void all_0_matrix()原创 2013-11-22 20:14:52 · 1452 阅读 · 0 评论 -
hdu2546-饭卡
饭卡 打啵固态思维,转换成01背包问题,学习人家dp的排版 先01背包算出用m-5元可以买到最贵的菜,然后就会一次买最贵的。 // File Name: hdu2546.cpp // Author: rudolf // Created Time: 2013年04月20日 星期六 18时51分53秒 #include #include #include using namespace原创 2013-04-20 19:03:05 · 877 阅读 · 0 评论 -
poj3624-Charm Bracelet
Charm Bracelet 01背包,打啵固态,背包重来 // File Name: poj3624.cpp // Author: rudolf // Created Time: 2013年04月20日 星期六 18时17分21秒 #include #include #include #include #include #include #include #include #inclu原创 2013-04-20 18:19:48 · 847 阅读 · 0 评论 -
POJ2184-Cow Exhibition
Cow Exhibition // File Name: poj2184.cpp // Author: rudolf // Created Time: 2013年04月21日 星期日 19时33分16秒 #include #include #include #include #include #include #include #include #include #include #inc原创 2013-04-22 13:17:09 · 968 阅读 · 0 评论 -
POJ 动态规划题目列表
声明: 1.这份列表当然不是我原创的,从文库里下载了一份,放到这里便于自己浏览和查找题目。动态规划还没完全理解,争取都做完。。。 ※最近更新:Poj斜率优化题目 1180,2018,3709 列表一:经典题目题号: 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1原创 2013-04-23 15:40:10 · 1401 阅读 · 0 评论 -
hdu1024-Max Sum Plus Plus
Max Sum Plus Plus dp最长子段和 我不能说什么了,人品严重出问题了,用C++居然TLE了 // File Name: hdu1024dp_zuichangziduanhe.cpp // Author: rudolf // Created Time: 2013年04月23日 星期二 16时25分45秒 #include #include #include #include原创 2013-04-23 16:47:53 · 1068 阅读 · 0 评论 -
HDU 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】
Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱 最脑残的是把总的概率以为是抢N家银行的概率之和… 把状态转移方程写成了f[j]=max{f[j],f[j-q[i].v]+q[i].money}(f[j]表示在概率j之下能抢的大洋原创 2013-04-23 15:42:49 · 1049 阅读 · 0 评论 -
I NEED A OFFER!
I NEED A OFFER! 比较麻烦处理的就是中间int doble 型定义的地方,其他还算好,虽然是水题,但是动态规划接触的真的很少,几大类型,接触最多的就是背包问题,要继续多做题,动态规划是一块硬骨头,慢慢啃,狠狠的啃下去 // File Name: hdu1203.cpp // Author: rudolf // Created Time: 2013年04月23日 星期二 17时原创 2013-04-23 18:38:19 · 812 阅读 · 0 评论 -
dp之01背包代码
#include using namespace std; int c[10][100];/*行代表是覆盖的背包个数,而列代表背包容量*/ int x[10];//存放最优解 int Knapsack(int n,int m,int w[],int v[]) { int i,j; for(i=0;i<10;i++)/*初始化数组C*/ for(j=0;j<100;j++) c[i][原创 2013-04-24 15:08:07 · 882 阅读 · 0 评论 -
最长公共子串长度
问题描述 我们称序列Z = 是序列X = 的子序列当且仅当存在严格上升的序列,使得对j = 1, 2, ... ,k, 有xij = zj。比如Z = 是X = 的子序列。 现在给出两个序列X和Y,你的任务是找到X和Y的最大公共子序列,也就是说要找到一个最长的序列Z,使得Z既是X的子序列也是Y的子序列。 输入数据 输入包括多组测试数据。每组数据包括一行,给出两个长度不超过200的字符串,原创 2013-04-24 15:02:38 · 1202 阅读 · 0 评论 -
dp之最长上升子序列
问题描述 一个数的序列bi,当b1 你的任务,就是对于给定的序列,求出最长上升子序列的长度。 解题思路 如何把这个问题分解成子问题呢?经过分析,发现 “求以ak(k=1, 2, 3…N)为终点的最长上升子序列的长度”是个好的子问题――这里把一个上升子序列中最右边的那个数,称为该子序列的“终点”。虽然这个子问题和原问题形式上并不完全一样,但是只要这N个子问题都解决了,那么原创 2013-04-24 15:11:30 · 854 阅读 · 0 评论 -
最少拦截系统
最少拦截系统 // File Name: hdu1257.cpp // Author: rudolf // Created Time: 2013年04月24日 星期三 19时26分47秒 #include #include #include #include #include #include #include #include #include #include #include #incl原创 2013-04-24 19:59:49 · 936 阅读 · 0 评论 -
hdu1176-免费馅饼
免费馅饼 dp之简单数塔题,关键在于将问题转换成为数塔模型,还需要注意的是下一层的可以取相邻的三个数; 转移方程:dp[i][j]=max{dp[i-1][j-1] ,dp[i-1][j],dp[i-1][j+1]}+p[i][j] p[i][j] // File Name: hdu1176.cpp // Author: rudolf // Created Time: 2013年原创 2013-04-24 22:06:41 · 1212 阅读 · 0 评论 -
hdu1087-Super Jumping! Jumping! Jumping!
Super Jumping! Jumping! Jumping! dp之最长上升子序和 // File Name: hdu1087.cpp // Author: rudolf // Created Time: 2013年04月25日 星期四 12时32分59秒 #include #include #include #include #include #include #inclu原创 2013-04-25 12:42:13 · 827 阅读 · 0 评论 -
hdu1159-Common Subsequence
Common Subsequence dp之最长公共子序列 // File Name: hdu1159.cpp // Author: rudolf // Created Time: 2013年04月25日 星期四 12时12分33秒 #include #include #include #include #include #include #include #include #inc原创 2013-04-25 12:22:18 · 959 阅读 · 0 评论 -
hdu1421-搬寝室
搬寝室 每次执行memset初始化,居然TLE // File Name: hdu1421.cpp // Author: rudolf // Created Time: 2013年04月25日 星期四 13时00分19秒 #include #include #include #include #include #include #include #include #include #in原创 2013-04-25 13:20:25 · 951 阅读 · 0 评论 -
FatMouse's Speed
FatMouse's Speed // File Name: hdu1160.cpp // Author: rudolf // Created Time: 2013年04月25日 星期四 14时47分25秒 #include #include #include #include #include #include #include #include #include #in原创 2013-04-25 14:45:57 · 1065 阅读 · 0 评论 -
Max Sum Plus Plus
Max Sum Plus Plus 这个题目爆坑,同样的代码第一遍TLE,第二次AC // File Name: hdu1024dp_zuichangziduanhe.cpp // Author: rudolf // Created Time: 2013年04月23日 星期二 16时25分45秒 #include #include #include #include #include #原创 2013-04-25 18:41:01 · 921 阅读 · 0 评论 -
hdu1208-Pascal's Travels
Pascal's Travels 这道题目本来DFS没搞懂,后来才发现用DFS也比较简单,题意大致为给你一个正整数N,然后输入N*N矩阵,每个位置代表到下一个位置所增加的步数,上下左右都可以,问你什么时候能到MAPP[n-1][n-1] (因为我的输入从0开始的,MAPP【】【】用于存放图,所以需要转换成int型的) DP // File Name: hdu1208.cpp /原创 2013-04-25 19:13:55 · 1059 阅读 · 0 评论 -
Doing Homework again(dp)
Doing Homework again // File Name: hdu1789.cpp // Author: rudolf // Created Time: 2013年04月20日 星期六 15时52分23秒 #include #include #include #include #include #include #include #include #include #include原创 2013-04-20 15:58:54 · 964 阅读 · 0 评论 -
Dollars
换硬币; 解析:由于数据不大,只有50$,先统一单位,同乘以20; 将每一中金额都预处理出来 DP基础题;第一维代表金额数,第二位代表使用的货币的种类数; 转移方程为dp[ i ][ j ] += dp[ i ][ j - 1]; //使用了i种币种,一定能用 i- 1种币种的种类,因为多的都可以用币种1表示; if( i >= num[ j ] ) //当当前金额大于原创 2013-11-30 00:21:02 · 896 阅读 · 0 评论