dp、背包
文章平均质量分 78
背包
阿聊
愿我千帆过尽,归来仍是少年
展开
-
hdu 2189 悼念512汶川大地震遇难同胞——来生一起走
题目这道题用了,埃式筛选法和背包,我自己没有做出来,看了别人的代码,我也做不出来,特别是c[j]+=c[j-b[i]];弄了好久都没有弄懂。这道题的解题思路:主要是先把150以内的所有素数找出来,存到一个数组里面,然后再用背包问题解决。#include#includeint a[151]={0},b[151],c[151];//数组a存储数字的因子和,数组b存储素数,数组c存原创 2017-10-16 13:03:56 · 318 阅读 · 0 评论 -
poj 2192 Zipper
题目刚开始本来觉得可以用队列来写,但是 例如 ta te teta,ta的t先出队列那就不行了,所以还得用dpdp[i][j] 表示A前i个字符与B前j个字符是否能构成C前i+j个字符要使 dp[i][j] = 1 :需满足 dp[i-1][j] == 1 && C[i+j-1] == A[i-1] 或者 dp[i][j-1...原创 2018-10-18 15:22:23 · 119 阅读 · 0 评论 -
poj 1837 Balance
题目题意:有一个类似天平的东西,左右两边臂长各15,然后给你一些臂上的挂钩和砝码,问把所有砝码放上去后天平达到平衡的的状态有多少种方案?input: C G //挂钩个数 砝码个数 C (2 <= C <= 20) and the number G (2 <= G <= 20); C个数 //挂钩位置(负数代表在平衡点左边)G个...原创 2018-10-19 18:02:42 · 144 阅读 · 0 评论 -
最长上升子序列 and 最长公共子序列 问题模板
两种求最长上升子序列问题第一种:定义dp[i]=以a[i]为末尾的最长上升子序列问题的长度第二种:定义dp[i]=长度为i+1的上升 子序列 中末尾元素的最小值#include <cstdio>#include <iostream>using namespace std;const int INF = 0x3f3f3f3f;int dp[100];...原创 2018-08-06 20:13:18 · 162 阅读 · 0 评论 -
hdu 1799 循环多少次?
题目题意:给出n,m,其中m表示有几层循环,求循环的次数①如果代码中出现for(i=1;i<=n;i++) OP ;那么做了n次OP运算;②如果代码中出现 fori=1;i<=n; i++) for(j=i+1;j<=n; j++) OP; 那么做了n*(n-1)/2 次OP 操作 如果有m层循环,那OP操作:n*(n-1)*(n-2...原创 2018-05-27 17:08:08 · 213 阅读 · 0 评论 -
hdu 2151 worm
题目虽然说很水,但是对于我这种菜鸟来说,感觉这道题还不错,又一次然我认识到了什么是动态规划。首先找到规划方程:dp[i][j]=dp[i-1][j-1]+_dp[i-1][j+1];dp[i][j]代表这个虫子在第i时刻到达了第j棵树的位置共有的方案数,注意初始化,由于在0时刻该虫子在p这个位置,所以方案数为1,即dp[0][p]=1; #include<stdi...原创 2017-10-16 17:16:05 · 221 阅读 · 0 评论 -
hdu 2067 小兔的棋盘
题目题意:求 从起点(0,0)走到终点(n,n)的最短路径数。已知n<=35题中说:从起点(0,0)走到终点(n,n)的最短路径数是C(2n,n),没有明白这个C(2n,n)是什么意思。摘抄:因为要求最短路径,所以反复走是不可以了,所以边上的格子只能有一条路径(无论离起点多远),这个条件可以当做已知,还有就是对对角线的处理,题中要求不能跨过对角线,我们先想一下什么叫做经过了...原创 2017-10-09 13:24:19 · 190 阅读 · 0 评论 -
hdu 1069 Monkey and Banana 【动态规划】
题目题意:研究人员要测试猴子的IQ,将香蕉挂到一定高度,给猴子一些不同大小的箱子,箱子数量不限,让猩猩通过叠长方体来够到香蕉。 现在给你N种长方体, 要求:位于上面的长方体的长和宽 要小于 下面长方体的长和宽。 思路:对于一种长方体,长宽高(a,b,c)有6总不同的组成方式{(a,b,c),(a,c,b),(b,a,c),(b,c,a),(c,a,b),(c,b,a) },对所有组...原创 2018-11-12 13:58:21 · 222 阅读 · 0 评论 -
Working out
题意:一个人从左上走到右下,一个人从左下走到右上,两个人必须有一个点作为见面点,见面点的权值不能拿,问按照规则走,取得最大权值的和为多少只是考虑左上角那个点的话起点记作start,假设在(i,j)点处相遇,这个点记作now,然后继续走到终点右下角记作end,那么是不是这条路线的和就应该是start->now + now -> end这两段的数值的和,当然了不加now那个点;...原创 2019-01-18 22:29:49 · 1169 阅读 · 0 评论 -
hdu 2191 【背包问题】
题目 请输出能够购买大米的最多重量,注意是重量不是价值。 把每一种物品拧出来,用01背包解决。 #include <cstdio>#include <iostream>#include <cstring>using namespace std;const int Max = 110;int N,W,w[Max],v[Ma...原创 2018-08-08 19:15:58 · 306 阅读 · 0 评论 -
01背包
问题描述已知:有一个容量为V的背包和N件物品,第i件物品的重量是weight[i],价值是cost[i]。问:在不超过背包容量的情况下,最多能获得多少价值。01背包的特点:每种物品只有一件,可以选择放或者不放1子问题:f[i][v] 表示前i件物品放到一个容量为v的背包中可以获得最大价值 2.状态转移方程:f[i][v] = max(f[i - 1][v],f[i - 1][v ...原创 2018-08-02 16:36:59 · 249 阅读 · 0 评论 -
hdu2844
题目 这道题,刚开始题没读懂,就是这句话:,A1,A2,A3...An and C1,C2,C3...Cn corresponding to the number of Tony's coins of value ,原本是A1,A2,A3...An 代表 价值 C1,C2,C3...Cn 代表 数量结果理解反了。题都读了一下午,真的是……唉……题意:一位同学想要买手表...原创 2017-07-31 18:57:04 · 378 阅读 · 0 评论 -
hdu 1864 最大报销额
题目①:先判断n张发票中,有哪些是可以是报销的,可以报销的条件是( 同类不能超过600,每张发票不能超过1000,除了A,B,C之外类型的发票不能报销 ),并且计算出每张发票可以报销的总额。②:初始化dp[0] = 0,表示都没有报销,外层循环遍历后续的发票,内层循环遍历当前发票之前的发票,判定如果报销发票满足输入能报销的最大额,就加上。③:最后遍历一边dp数组,找出最大值就是解。原创 2017-11-30 16:27:57 · 709 阅读 · 0 评论 -
hdu 1231 最大连续子序列 ,1003 Max Sum;
题目#include#includeusing namespace std;int main(){ int K,num[10010],cnt; int end,start,thisMax,Max,temp; while(cin>>K&&K) { cnt=0; for( int i=0; i<K; i++)原创 2017-11-30 18:37:16 · 186 阅读 · 0 评论 -
hdu 1284 钱币兑换
题目我们用dp[n]表示用这些硬币组成n的方法总数。。。。然后随着硬币种类的增加来更新dp[]的值,也就是最外面的一层循环for(i :1-->3)开始初始化的时候没有硬币,然后新来了面值为1的硬币,接着又来了面值为2的硬币。。。。显然,每新增加一种面值的硬币,dp[]的值一定在增加。。。新的dp[] = 未新增前的dp[] + dp[1件新增硬币] + dp[2件新增硬币] + dp原创 2017-12-01 20:13:48 · 169 阅读 · 0 评论 -
hdu 1505,1506
1506题目1505题目1506:#include#include#includeusing namespace std;const int Max = 100010;int main(){ int n; long long num[Max],temp; int L[Max],R[Max]; while(~scanf("%d",&n),n原创 2017-12-02 13:58:37 · 185 阅读 · 0 评论 -
多重背包
#include <iostream>#include <cstring>using namespace std;const int Max = 100;int N,W;int w[Max],v[Max],num[Max];int f[Max];void ZeroOnePack(int nweight,int nvalue){ for(int j...原创 2018-08-09 11:28:55 · 126 阅读 · 0 评论 -
完全背包
#include <iostream>#include <cstring>using namespace std;const int Max = 100;int N,W;int w[Max],v[Max];int f[Max][Max];int CompletePack(){ memset(f,0,sizeof(f)); for(int ...原创 2018-08-09 11:36:10 · 205 阅读 · 0 评论 -
01背包问题 总结关于为什么01背包优化成1维数组后,内层循环是逆序的?
首先 什么是01背包问题?(可以参考下百度百科 只是我觉得百度百科对于为什么逆序这个问题解释的不是特别清楚)(以下题目中的内容摘自百度百科)/////////////////////////////////////////////////////////////////////////////////////题目有N件物品和一个容量为V的背包。第i件物品的重量是c[i],价值是w[i]。...转载 2018-07-31 20:39:06 · 2518 阅读 · 15 评论 -
计蒜客:最大子阵
这道题是个二维数组的,我们看看:如果有一个一维数组a[n],如何找出连续的一段,使其元素之和最大呢?例如:int a[]= {1,2, -3, 4, -2, 5,-3,-1, 7,4, -6 }; max=14。1.穷举法(有三层循环,所以n很大时不能使用这种方法。)int main(){ int a[]={1 ,2, -3, 4, -2, 5 ,-3 ,-1, 7,...原创 2019-03-26 18:28:19 · 694 阅读 · 0 评论