P1855 榨取kkksc03 题解 二维背包板子题 f[ i ][ j ] 前 n 个物品,花费金钱不超过 i ,花费时间不超过 j 的最大价值 如果每个物品只能选一次,那么就相当于在01背包上多加一维 代码 #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<string> #inclu…
[题目描述:] ... (宣传luogu2的内容被自动省略) 洛谷的运营组决定,如果...,那么他可以浪费掉kkksc03的一些时间的同时消耗掉kkksc03的一些金钱以满足自己的一个愿望. Kkksc03的时间和金钱是有限的,所以他很难满足所有同学的愿望.所以他想知道在自己的能力范围内,最多可以完成多少同学的愿望? [输入格式:] 第一行,n M T,表示一共有n(n<=100)个愿望,kkksc03 的手上还剩M(M<=200)元,他的暑假有T(T<=200)分钟时间. 第2~n+1…
洛谷1387 dp题目,刚开始写的时候使用了前缀和加搜索,复杂度大概在O(n ^ 3)级别,感觉这么写还是比较对得起普及/提高-的难度的..后来看了题解区各位大神的题解,开始一脸mb,之后备受启发. 设dp[i][j]表示以(i, j)为右下点的正方形的最大边长,则转移方程如下: dp[i][j] = min{dp[i-1][j], dp[i][j-1], dp[i-1][j-1]} + 1 (a[i][j] == 1) dp[i][j] = 0 (a[i][j] == 0) 转移非常简单,但是…
二维dp 扯淡 一道比较基本的入门难度的二维dp,类似于那道方格取数,不过走过一次的点下次不能再走(看提交记录里面好像走过一次的加一次a[i][j]的也AC了,,),我记得当年那道方格取数死活听不懂,最后自己硬是摸索出来了一个搜索加剪枝加贪心卡过去了..现在看这道题感觉好简单.... 一直感觉自己的水平没什么太大的长进,突然回头一看,其实已经走过了好多路. 言归正传 由于在题目中纸条传递的方向是没有意义的,所以直接考虑将两个纸条都从上往下传递,设dp[i][j][k][l]表示第一张纸条在(i,…
P1855 榨取kkksc03 题目描述 洛谷的运营组决定,如果一名oier向他的教练推荐洛谷,并能够成功的使用(成功使用的定义是:该团队有20个或以上的成员,上传10道以上的私有题目,布置过一次作业并成功举办过一次公开比赛),那么他可以浪费掉kkksc03的一些时间的同时消耗掉kkksc03的一些金钱以满足自己的一个愿望. Kkksc03的时间和金钱是有限的,所以他很难满足所有同学的愿望.所以他想知道在自己的能力范围内,最多可以完成多少同学的愿望? 输入输出格式 输入格式: 第一行,n M T…
P1855 榨取kkksc03 题目描述 洛谷2的团队功能是其他任何oj和工具难以达到的.借助洛谷强大的服务器资源,任何学校都可以在洛谷上零成本的搭建oj并高效率的完成训练计划. 为什么说是搭建oj呢?为什么高效呢? 因为,你可以上传私有题目,团队外别人是无法看到的.我们还能帮你们评测! 你可以创建作业,给组员布置任务,查看组员的完成情况,还可以点评任意一份代码! 你可以创建比赛!既可以是oi赛制还可以是acm赛制!既可以是团队内部的私有比赛,也可以公开赛,甚至可以指定谁可以参加比赛.这样,搞"…
洛谷 P2015 二叉苹果树 (树上背包) 一道树形DP,本来因为是二叉,其实不需要用树上背包来干(其实即使是多叉也可以多叉转二叉),但是最近都刷树上背包的题,所以用了树上背包. 首先,定义状态\(dp[x][i]\)表示在节点\(x\)保留\(i\)个边所获得的最大苹果数,定义状态时一定要选对状态并且定义清晰(状态中包括了当前节点吗?目标状态是怎样的?).一开始我就是因为状态定义错误,所以卡了半天,之后重新定义状态后几分钟就切了这道题. 然后是普通的树上背包状态转移 \[ dp[x][i]=m…
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 洛谷 P1858 多人背包 题目描述 求01背包前k优解的价值和 输入输出格式 输入格式 第一行三个数 $ K,V,N $ 接下来每行两个数,表示体积和价值 输出格式 前 $ k $ 优解的价值和 输入输出样例 输入样例 2 10 5 3 12 7 20 2 4 5 6 1 1 输出样例 57 说明 对于100%的数据, $ K \leq 50,V \leq…
[问题描述] 背包是个好东西,希望我也有.给你一个二维的背包,它的体积是? × ?.现在你有一些大小为1× 2和1×3的物品,每个物品有自己的价值.你希望往背包里面装一些物品,使得它们的价值和最大,问最大的价值和是多少. [输入格式] 第一行一个整数?代表该测试点的数据组数.对于每组数据,第一行有四个整数?,?,? 1 ,? 2 ,其中? 1 ,? 2 分别代表大小为1× 2和大小为1 × 3的物品个数.1 × 2 接下来一行有? 2 个数代表每个1 × 3物品的价值. [输出格式] 对于每组询…
题目:你可以有v1元,v2代金券,v3个物品免单,现在有n个商品,商品能用纸币或者代金券购买,当然你可以买v3个商品免费.问怎么最大能买多少价值 题意: 思路二维背包,dp[v1][v2][v3]=MAX(dp[v1-n.a][v2][v3]+n.value,dp[v1][v2-n.b][v3]+n.value,dp[v1][v2][v3-1]+n.value) #include <iostream> #include<cstdio> #include<cstring>…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 解题报告:这题实际上是一个二维的背包问题,也可以由01背包扩展而来,01背包用一维数组,可想而知二维背包应该二维数组,然后每一维表示它的一种不同的需要付出的代价,普通的二维背包的递推公式是dp[j][k] = max(dp[j][k],w[j-v[i][k-n[i]] + w[i]);,要注意的是这是一般的二维背包的递推公式,但是在这题中有一点小小的变化,就是 怪的个数有无限个,也就是说每件物…
注意排除干扰项. 因为价值不会相等,所以价值的多少与本题没有任何关系,. 所以价值为干扰项,所以不用考虑. 二维背包,简单求解. #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #define INF 99999999 int dp[110][110]; using namespace std; int main() { int n,m,ts,i,j,k,…
http://noi.openjudge.cn/ch0206/4978/ 描述 宠物小精灵是一部讲述小智和他的搭档皮卡丘一起冒险的故事. 一天,小智和皮卡丘来到了小精灵狩猎场,里面有很多珍贵的野生宠物小精灵.小智也想收服其中的一些小精灵.然而,野生的小精灵并不那么容易被收服.对于每一个野生小精灵而言,小智可能需要使用很多个精灵球才能收服它,而在收服过程中,野生小精灵也会对皮卡丘造成一定的伤害(从而减少皮卡丘的体力).当皮卡丘的体力小于等于0时,小智就必须结束狩猎(因为他需要给皮卡丘疗伤),而使得…
题意:有一群sb要拔河,把这群sb分为两拨,两拨sb数只差不能大于1,输出这两拨人的体重,小的在前面...... 思路:把总人数除2,总重量除2,之后你会发现就是个简单的二维背包,有两个限制.....一个是人数,一个是体重,再仔细思考下,发现一定要有这么多人,也就是说一定要有总人数除以2这么多人,那么当第n个人存在,第n-1个人必须存在......... #include<iostream> #include<stdio.h> #include<string.h> us…
Watch The Movie Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 4613    Accepted Submission(s): 1456 Problem Description New semester is coming, and DuoDuo has to go to school tomorrow. She deci…
P1509 找啊找啊找GF 题解 很明显这是一道二维背包题目 如果一个dp数组做不了,那么我们就再来一个dp数组 题目要求,花费不超过 m ,消耗人品不超过  r  ,泡到尽量多的妹子,时间尽量少 f [ i ][ j ] 花费不超过 m ,消耗人品不超过 j ,可以泡到的最多妹子数量 g [ i ][ j ] 花费不超过 m ,消耗人品不超过 j ,可以泡到最多妹子的最少时间 注意: 1. f [ i ][ j ] 可能相同但是对应的 g[ i ][ j ] 有不同,即 2. ans 可能相同…
/* 要求把a数组分成两个集合,两个集合人数最多差1,并且元素之和的差尽可能小 那只要把所有可行的列出来即可 01二维背包,即体积是个二维数据,那么我们的背包状态也应该设为二维 dp[j][k]设为 有j个人,体积为k的状态是否可行 第一维上限是人数的一般,第二维上限是元素总和的一半 */ #include<iostream> #include<cstring> #include<cstdio> using namespace std; ]; ][*]; int mai…
P1855 榨取kkksc03 题目描述 以下皆为真实的故事. 洛谷2的团队功能是其他任何oj和工具难以达到的.借助洛谷强大的服务器资源,任何学校都可以在洛谷上零成本的搭建oj并高效率的完成训练计划. 为什么说是搭建oj呢?为什么高效呢? 因为,你可以上传私有题目,团队外别人是无法看到的.我们还能帮你们评测! 你可以创建作业,给组员布置任务,查看组员的完成情况,还可以点评任意一份代码! 你可以创建比赛!既可以是oi赛制还可以是acm赛制!既可以是团队内部的私有比赛,也可以公开赛,甚至可以指定谁可…
[题目描述:] 正处在某一特定时期之中的李大水牛由于消化系统比较发达,最近一直处在饥饿的状态中.某日上课,正当他饿得头昏眼花之时,眼前突然闪现出了一个n*m(n and m<=200)的矩型的巨型大餐桌,而自己正处在这个大餐桌的一侧的中点下边.餐桌被划分为了n*m个小方格,每一个方格中都有一个圆形的巨型大餐盘,上面盛满了令李大水牛朝思暮想的食物.李大水牛已将餐桌上所有的食物按其所能提供的能量打了分(有些是负的,因为吃了要拉肚子),他决定从自己所处的位置吃到餐桌的另一侧,但他吃东西有一个习惯——只…
https://www.luogu.org/problem/show?pid=1855 题目描述 洛谷2的团队功能是其他任何oj和工具难以达到的.借助洛谷强大的服务器资源,任何学校都可以在洛谷上零成本的搭建oj并高效率的完成训练计划. 为什么说是搭建oj呢?为什么高效呢? 因为,你可以上传私有题目,团队外别人是无法看到的.我们还能帮你们评测! 你可以创建作业,给组员布置任务,查看组员的完成情况,还可以点评任意一份代码! 你可以创建比赛!既可以是oi赛制还可以是acm赛制!既可以是团队内部的私有比…
题目描述 洛谷2的团队功能是其他任何oj和工具难以达到的.借助洛谷强大的服务器资源,任何学校都可以在洛谷上零成本的搭建oj并高效率的完成训练计划. 为什么说是搭建oj呢?为什么高效呢? 因为,你可以上传私有题目,团队外别人是无法看到的.我们还能帮你们评测! 你可以创建作业,给组员布置任务,查看组员的完成情况,还可以点评任意一份代码! 你可以创建比赛!既可以是oi赛制还可以是acm赛制!既可以是团队内部的私有比赛,也可以公开赛,甚至可以指定谁可以参加比赛.这样,搞“x校联赛”最合适不过了.洛谷凭借…
先上题目链接:P1616 疯狂的采药 然后放AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ll f[]; ll timee[]; ll w[]; int main() { ll t,m; cin>>t>>m;//t总时间,m总草药 //time时间,w价值 ;i<=m;i++) { scanf("%lld",&timee[i]); scan…
这道题一开始是按照caioj上面的方法写的 (1)存储二叉树用结构体,记录左儿子和右儿子 (2)把边上的权值转化到点上,离根远的点上 (3)用记忆化搜索,枚举左右节点分别有多少个点,去递归 这种写法有个好处, 避免了总的树枝个数的枚举 #include<cstdio> #include<algorithm> #include<vector> #include<cstring> #define REP(i, a, b) for(int i = (a); i &…
http://acm.hdu.edu.cn/showproblem.php?pid=2159 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度.当忍耐度降到0或者0以下时,xhd就不会玩这游戏.xhd还说了他最多只杀s只怪.请…
潜水员要潜水,给出n个气缸(1<=n<=1000),每个气缸中有氧气量为ti,氮气量为ai,气缸重量为wi(1<=ti<=21,1<=ai<=79,1<=wi<=800).现在潜水员需要量为t的氧气,量为a的氮气(1<=t<=21,1<=a<=79),问选哪些气缸,使得重量最小. [背包]二维背包问题,不同的是这个要选的物品占两种容量至少为t和a. 设dp[i][j][k]为氧气量为j,氮气量为k时的最小重量 dp[i][j][k]=…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 思路: 定义ans存当前满足条件的消耗的最小的忍耐值(满足条件的忍耐值为在当前消耗的忍耐值的情况下,获得的经验值大于等于n). 定义dp[i][j],表示杀i只怪,消耗j个忍耐值的获得 的最大的经验值, 那么状态转移方程很容易得出:dp[i][j]=max(dp[i][j],dp[i-1][j-c[i]]+v[i]); 代码如下:(如果看不懂,可以先看一下背包九讲) #include<iost…
/* 给定辩控双方给每个人的打分p[i],d[i], dp[j][k]表示前i个人有j个被选定,选定的人的辩控双方打分差之和是k,此状态下的最大辩控双方和 按01背包做,体积一维是1,体积二维是辩控双方打分差,价值是辩控双方打分和 要求体积一维不得超过m,体积二维在体积一维=m的情况下最小 状态转移方程:dp[j][k]=max(dp[j][k],dp[j-1][k-(a[i]-b[i])]+a[i]+b[i]) */ #include<iostream> #include<cstrin…
题意:给你c(2<=c<=20)个挂钩,g(2<=g<=20)个砝码,求在将所有砝码(砝码重1~~25)挂到天平(天平长  -15~~15)上,并使得天平平衡的方法数....... 思路:(这是我木有想到的)将g个挂钩挂上的极限值:15*25*20==7500 那么在有负数的情况下是-7500~~7500   以0为平衡点...... 那可以将平衡点往右移7500个单位,范围就是0~~15000......这样就好处理多了 其实我觉得以后的题目中不仅仅天平问题可以这样处理,在有负数…
[题目]D. Animals and Puzzle [题意]给定n*m的01矩阵,Q次询问某个子矩阵内的最大正方形全1子矩阵边长.n,m<=1000,Q<=10^6. [算法]动态规划DP+二维ST表 [题解]设f[i][j]为以(i,j)为右下角的最大正方形全1子矩阵. f[i][j]=min{ f[i-1][j-1] , f[i][j-1] , f[i-1][j] }+1 然后用二维ST表处理f[i][j]的子矩阵最小值. 对于每次询问,二分边长x,答案即子矩阵(x1+x-1,y1+x-1…
dp这一方面的题我都不是很会,所以来练(xue)习(xi),大概把这题弄懂了. 树形dp就是在原本线性上dp改成了在 '树' 这个数据结构上dp. 一般来说,树形dp利用dfs在回溯时进行更新,使用儿子节点对父亲节点进行更新. 树形dp很多题需要在二叉树上进行. 进入正题. 点我看题 这个图是洛谷题面里奇奇怪怪的东西,格式弄好就这样. 题意:有一棵已知根(1)的二叉树,每条边都有一个权值,现在可以保留 q 条边,问在这样的前提下,以 1 为根 的树最多能有多少权值和. 题意可以画个图来解释 这个…