
动态规划
文章平均质量分 50
smallacmer
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
The 36th ACM/ICPC Asia Regional Dalian Site —— Online Contest &&To Miss Our Children Time
http://acm.hdu.edu.cn/showproblem.php?pid=4001 Problem Description Do you remember our children time? When we are children, we are interes原创 2011-09-22 19:37:05 · 904 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1505
标记,枚举+迭代。。。。 #include #include #include #define N 1001 using namespace std; bool map[N][N]; int dp[N][N]; int s[N]; int l[N],r[N]; int main() { int T; cin>>T; while(T--) { int n,m; cin>>n>>m原创 2012-03-13 19:51:28 · 568 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1087
最大递增连续子串和。。。dp[i]表示以第i点为结束点最大连续子串和 状态转移方程dp[i]=s[i]; if(s[j] AC代码: #include #include #include #define N 1001 using namespace std; int dp[N]; int s[N]; int main() { int n; while(cin>>n&&n) {原创 2012-03-13 21:17:05 · 536 阅读 · 0 评论 -
http://acm.nyist.net/JudgeOnline/problem.php?pid=309
一道省赛题。。主要是模拟一下过程,其他的就是实现代码的能力了。。。 #include #include #include #include #include #define N 1001 using namespace std; int a[N],b[N]; int main() { int n,m; while(cin>>n>>m) { memset(a,0,sizeof(a));原创 2012-03-16 13:59:10 · 536 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2191&&多重背包+二进制优化
思路:把多重背包转化为0-1背包来做。。 #include #include #include using namespace std; int v[510]; int dp[101]; int w[510]; int main() { int T; cin>>T; while(T--) { int V,n; cin>>V>>n; memset(dp,0,sizeo原创 2012-03-17 11:15:25 · 621 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1171&&0-1&&多重背包混合
由于昨天js给我讲了一下一系列的背包问题,今天一大早就高兴的来到工作室开始弄背包题,没想杯具就从这开始了,,一开始写的还算顺利,但就写好准备提交时,不论优化不优化就一直tle。。最后只好找lj要了代码,,一看完全一样,,但为什么我的总是tle,百思不得其解,,最后在不断的郁闷下发现这道题的测试数据竟然没有结束的标记。。坑爹啊,整整耗了我两个小时。。 法一: #include #includ原创 2012-03-17 10:24:25 · 869 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1248&&完全背包
思路:完全背包转化为多重背包,多重背包在转化为0-1背包。 AC代码: #include #include #include using namespace std; int dp[10005]; int v[25]; int b[3]={150,200,350}; int main() { int T; cin>>T; while(T--) {原创 2012-03-18 07:58:04 · 596 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2159&&二维完全背包
一开始的思路是用把完全背包转化为0-1背包来解。。。一直wa,,最后上网搜了一下说是二维完全背包。。。dp[i][j]表示容忍度为i杀敌数为j个获得的最大经验。 #include #include using namespace std; int dp[101][101]; int v[101],w[101]; int n,m,k,s; int main() { int i,j,p;原创 2012-03-18 11:11:59 · 579 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1114&&完全背包
题意:硬币的数量不限制,让储蓄罐装满时得到的最少价值。 思路:先将完全背包转化成多重背包,再转化成0-1背包来解,不过这里要进行二进制优化,因为这里要保证储蓄罐要装满,所以需要先把容量为0时,价值赋为0,因为让求最小价值,因此需要把大于0的容量都赋为无穷大,如果让求的是装满时的最大价值则要把大于0的容量都赋为无穷小。。。 #include #include #include using n原创 2012-03-20 11:13:24 · 641 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=3591&&背包问题
多重和完全背包组成的混合背包。。构造dp[i]为付i元钱需要的最少的钱的张数,,,然后二进制思想转化为0-1背包。。。 #include #include #include using namespace std; int dp[200010]; int v[1400]; int w[1400]; int a[101]; int main() { int n,T; int res=0; w原创 2012-03-20 20:47:08 · 684 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1059&&多重背包
先转化为0-1背包并用二进制处理。 #include #include #include using namespace std; int a[6]; int dp[50005]; int v[100]; int main() { int res=0; while(1) { if(res++) cout<<endl; memset(dp,0,sizeof(dp)); b原创 2012-03-20 19:12:41 · 964 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2844&&背包问题
题意:给你一些硬币,问你一共可以组成多少种面值的钱。。。可以转化为0-1背包问题,求出可以把背包装满的情况。。。 AC代码: #include #include #include #define N 100000 #define M 1700 using namespace std; int v[M],dp[N]; int a[101],b[101]; int main() { int原创 2012-03-23 09:58:48 · 694 阅读 · 0 评论 -
http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1003&&矩阵链乘
问题描述 给定一个有n个矩阵的矩阵链A1A2A3…An,其中矩阵Ai(i=1,2,3…n)的维度为pi-1*pi。我们知道,两个维度分别为m*r和r*n的矩阵用一般的矩阵乘法相乘,所需的运算次数为m*r*n,最后得到一个维度为m*n的结果矩阵。对于矩阵链问题,因为矩阵乘法具有结合律,其运算顺序有很多中选择。换句话说,不论如何括号其乘积,最后结果都会是一样的。例如,若有四个矩阵A、B、C和D原创 2012-07-05 19:41:54 · 960 阅读 · 0 评论 -
http://acm.timus.ru/problem.aspx?space=1&num=1018&&Binary Apple Tree
题意:给你一棵树,树上有很多苹果,现在要求你砍去一些树枝,问你砍去树枝后最多可以保留多少苹果,树形dp入门题 dp[i][j]表示以i为根节点保留j个树枝最多可以保留的苹果数。可得动态转移方程dp[i][j]=max(dp[i][j],dp[la][i]+dp[ra][j-i+1]); AC代码: #include #include #include using namespace s原创 2012-10-18 09:56:03 · 1274 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1506
求最大矩形面积,如果按一般的方法肯定超时,这里用到了迭代法,类似于动态规划以空间去换时间,这一题主要是找到当前高度所能扩展的最左边和能扩展的最右边,从而得出当前高度的最大宽度,这一题坑爹的是用long long类型1s,而用—int64却78ms。。这到底是为什么啊。。。 #include #include #include #include #include #define N 100005原创 2012-03-13 15:09:15 · 641 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1003
动态规划水题。。 #include #include #include #include #include using namespace std; int main() { int n; int T; scanf("%d",&T); for(int k=1;k<=T;++k) { printf("Case %d:\n",k); sc原创 2012-03-13 12:37:37 · 547 阅读 · 0 评论 -
最长公共子序列&&http://acm.nyist.net/JudgeOnline/problem.php?pid=36
这是一道动态规划入门题,,,赋予dp[i][j]为s串从0-i与s1串从0-j中最大的匹配长度。。。 AC代码: #include #include #include #define N 1001 using namespace std; int dp[N][N]; int main() { int Case; cin>>Case; while(Case--) { str原创 2012-01-08 10:48:36 · 697 阅读 · 0 评论 -
导弹拦截二&&http://acm.hdu.edu.cn/showproblem.php?pid=1257
这一题可谓称做导弹拦截加强版。。。我写的上一篇是求一套拦截导弹装置最多能拦截导弹的个数。。这一题给你一些导弹发射的高度。。让你求出共需要多少这样的装置。。 仔细想一下就会发现这两道题得解法完全一样,只是在用dp时赋予不同的含义。。和上一篇相比代码就改一个符号就ok了。。。。 代码: #include #include #include using namespace std; int dp[原创 2012-01-08 13:01:34 · 1386 阅读 · 0 评论 -
动态规划思想
一、动态规划的基本思想 动态规划:适用于子问题不是独立的情况,也就是各子问题包含公共的子问题,鉴于会重复的求解各子问题,DP对每个问题只求解一遍,将其保存在一张表中,从而避免重复计算。 注意 :用动态规划解决问题,主要是要找到状态转移方程; 二、动态规划的基本步骤: 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个原创 2012-01-08 09:22:41 · 916 阅读 · 0 评论 -
导弹拦截&&http://acm.nyist.net/JudgeOnline/problem.php?pid=79
动态规划感觉挺有意思的,以前不怎么爱,,现在有点改观了。。。。(*^__^*) 嘻嘻……,做这一类体,主要是找准状态转移方程。。。。 这一题的状态转移方程。。 从后往前: if(a[i]>a[j]) dp[i]=max(dp[i],dp[j]+1); 从前往后: if(a[i] AC代码: #include #include using namespace std; int d原创 2012-01-08 12:06:16 · 687 阅读 · 0 评论 -
杭电动态规划
本文来自优快云博客,转载:http://blog.youkuaiyun.com/qishibo1990/archive/2010/04/25/5527736.aspx Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱 最脑残的是把总的转载 2012-01-09 10:11:22 · 683 阅读 · 0 评论 -
I NEED A OFFER! &&http://acm.hdu.edu.cn/showproblem.php?pid=1203
这一题真坑爹啊!!白白耗费了我进一个小时。。。留校的孩纸伤不起啊!!!!!!动态规划入门。。。。 #include #include #include using namespace std; double dp[10001]; typedef struct { int a; double b; }Node; Node s[1001]; int main() { int n,m;原创 2012-01-09 11:59:55 · 1547 阅读 · 0 评论 -
最大连续子序列&&http://acm.hdu.edu.cn/showproblem.php?pid=1231
Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和 为20。 在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要原创 2012-01-09 18:26:23 · 1320 阅读 · 0 评论 -
To The Max &&http://acm.hdu.edu.cn/showproblem.php?pid=1081
这道题很扯淡,,没有说有多组测试数据,却又多组测试数据,,,而且还是以输入0时为结束。。。 #include #include using namespace std; int dp[101][101]; int b[101]; int main() { int n; while(cin>>n&&n) { memset(dp,0,sizeof(dp));原创 2012-01-10 08:47:49 · 630 阅读 · 0 评论 -
Robberies&&http://acm.hdu.edu.cn/showproblem.php?pid=2955
http://acm.hdu.edu.cn/showproblem.php?pid=2955 这一题算是0-1背包的变种,,通过构造背包,,来求在满足情况的条件下,背包的最大容量。。。 思路:题目给出我们被抓的最大概率。即给出不被抓的最小概率,因此我们可以构造dp来存不被抓的最大概率。。以所有银行的钱为背包容量,以(1-p)表示背包的价值,从而求对应背包的最大价值。。。。 #includ原创 2012-01-10 09:46:54 · 1301 阅读 · 0 评论 -
免费馅饼
免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11134 Accepted Submission(s): 3665 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上原创 2012-02-19 11:03:23 · 800 阅读 · 0 评论 -
邮票分你一半 &&0—1背包
邮票分你一半 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明。每张邮票上都有分值,他们想把这些邮票分成两份,并且使这两份邮票的分值和相差最小(就是小珂得到的邮票分值和与小明的差值最小),现在每张邮票的分值已经知道了,他们已经分好了,你知道最后他们得到的邮票分值和相差多少吗? 输入 第一行只有一个整原创 2012-03-08 13:10:18 · 727 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2845&&最大不连续数和
Beans Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1176 Accepted Submission(s): 615 Problem Description Bean-eating is an interesting g原创 2012-03-26 09:37:19 · 672 阅读 · 0 评论 -
http://acm.nyist.net/JudgeOnline/problem.php?pid=336&&动态规划
构造dp[i][j]为字符串s从0-i有多少个字符串t从0-j。。。。 状态转移方程dp[i][j]=dp[i-1][j]+dp[i-1][j]+dp[i-1][j-1]; AC #include #include int main() { int t; int i,j,k; char a[100001],b[1001]; int dp[2][1001]; scanf("%d",&t);原创 2012-03-11 15:28:30 · 503 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=1864
不知道这道题用float为什么不行。。double就行郁闷。。。这道题是以发票的张数为背包容量,,从而求出最大价值。。 #include #include #include #include #include using namespace std; int dp[31]; int s[31]; int main() { double w; int n; int A,B,C; w原创 2012-03-13 10:07:58 · 501 阅读 · 0 评论 -
http://poj.org/problem?id=3356&&dp
题意:给你两个字符串,让你把第一个字符串转化为第二个字符串,问你最少需要多少次操作(添加,删除,更改),属于lcs的变形题: 定义dp[i][j]为第一个串的前i个字符转化为第二个串的前j个字符所需最小的步骤,这是满足最优子结构性质的,因为如果转移到dp[i][j]的那个状态不是可以转化过来的状态中最优的,我们可以用最优的替代它 那么怎么转移呢?显然如果s1[i]=s2[j](s1为第原创 2012-11-04 15:31:04 · 773 阅读 · 0 评论