ZOJ - 3623 完全背包变种】的更多相关文章

题意理解有误导致方程建歪,题意是n种类型的船造成至少L伤害的最小时间,攻击过程是不必同步的 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<string> #include<vector> #include<stack&g…
B - Battle Ships Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Status Practice ZOJ 3623 Appoint description:   Description Battle Ships is a new game which is similar to Star Craft. In this game, the enemy builds a…
Course Selection System ZOJ - 3956 这个题目居然是一个01背包,我觉得好难想啊,根本就没有想到. 这个题目把题目给的转化为  ans = a*a-a*b-b*b 这个可以看成 当b不变的时候 a 越大越好. 这个就可以用01背包来解决 #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <algor…
题意:给你5种银币,50 25 10 5 1,问你可以拼成x的所有可能情况个数,注意总个数不超过100个 组合数问题,一看就是完全背包问题,关键就是总数不超过100个.所有我们开二维dp[k][j],表示使用k个硬币组成j的价值所有个数 接着就是直接使用完全背包,而且枚举硬币个数就只需要一次枚举1到100就好了 #include<set> #include<map> #include<queue> #include<stack> #include<cm…
Battle Ships Time Limit: 2 Seconds      Memory Limit: 65536 KB Battle Ships is a new game which is similar to Star Craft. In this game, the enemy builds a defense tower, which has L longevity. The player has a military factory, which can produce N ki…
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3623 题意:给出N种可以建造的船和对方的塔生命值L,每种船给出建造时间t[i]和每秒输出dps[i],船坞在同一时间仅仅能建造一支船(类似红警),问多少时间以后可以灭掉塔. 思路:dp[i]代表的是在前i秒内能造成的伤害量,把时间反过来考虑,对于每支船的建造,在前i秒内所占用的建造时间是第i-t[i]+1~i秒,状态转移方程是dp[i+t[j]]=max(dp[i+…
http://acm.hdu.edu.cn/showproblem.php?pid=3466 http://www.cnblogs.com/andre0506/archive/2012/09/20/2695841.html 这道题多了一个限制条件Qi,低于Qi时不能购买. 解题思路是看更新量,因为限制条件限制的是更新量. 比如一个物品是5 9,一个物品是5 6,对第一个进行背包的时候只有dp[9],dp[10],…,dp[m],再对第二个进行背包的时候,如果是普通的,应该会借用前面的dp[8],…
题意:给你n个挂钩,m个砝码,要求砝码都用上,问有多少中方案数 题解:对于这道题目的状态,我们定义一个变量j为平衡度,当j=0的时候,表明天平平衡.定义dp[i][j]表达的含义为使用前n个砝码的时候,平衡度为j的方案数.计数类型的背包,更新的时候把每个砝码的所有可能贡献(每个砝码可以放在不同的钩子上,每个钩子的离中点的距离不一致)都updata一下就ok了.关键是状态的抓取,然后这个计数背包的理解. ac代码: #include <cstdio> #include <iostream&…
先说说普通01包的状态问题吧 普通的01背包,在状态转移的过程中为了求出最优解,一定是遍历了所有的情况 然后再求的最优解.那么对于第k最优解问题,我们只需要再加一个维度,用来记录每一个状态k优解的状态就好了. 在普通背包过程中 每次的选举的状态为dp[i-1][j],dp[i-1][j-c[i]+w[i]  为了求解最优情况 我们一般是对这两个状态取最大值 然后依次遍历 得到最大值.那么,为了得到第k大的解,我们就需要另外使用数组来对两种状态的所有值记录下来 然后选取第k大的情况 上代码 #in…
题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1013 好吧,这题没节操=_= 状态f[u,v,i]表示:消费u的人民币和v的人品同时泡到i个mm所需要的最少时间. #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using namespace std; ][][], r[], rp[], t[], rmb,…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5543 题意: 给你N个金条和一张长度为L的桌子.每个金条长度为a[i],价值为w[i].金条只能在桌子上横着摆一排,并且只要金条的重心(中心)在桌子上,就可以放.问你在桌子上能够摆的金条的最大总价值. 题解: 首先表示状态: 考虑到第i个金条,在这之前已经占用了j的长度,在k个端点摆了金条.即:dp[i][j][k] 如何转移(逆推): 对于第i个金条,有三种决策:摆在桌子中央.摆在桌子端点处.不摆…
Proud Merchants Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 4219    Accepted Submission(s): 1740 Problem Description Recently, iSea went to an ancient country. For such a long time, it was…
1.hdu 2126 Buy the souvenirs 题意:给出若干个纪念品的价格,求在能购买的纪念品的数目最大的情况下的购买方案. 思路:01背包+记录方案. #include<iostream> #include<cstdio> #include<cstring> using namespace std; ; ; int cnt[maxw]; int dp[maxw]; int p[maxn]; int main() { int t; scanf("%…
这段时间看了<背包九讲>,在HUST VJUDGE上找到了一个题单,挑选了其中16道题集中做了下,选题全部是HDU上的题,大多是简单题.目前做了点小总结,大概提了下每道题的思路重点部分,希望以后回看回想时能有帮助. 题单:http://vjudge.net/contest/22694#overview 题单列表 HDU 1059.HDU 1114.HDU 1171.HDU 1203.HDU 1712.HDU 2159. HDU 2191.HDU 2546.HDU 2602.HDU 2639.H…
2287: [POJ Challenge]消失之物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 254  Solved: 140[Submit][Status] Description ftiasch 有 N 个物品, 体积分别是 W1, W2, ..., WN. 由于她的疏忽, 第 i 个物品丢失了. “要使用剩下的 N - 1 物品装满容积为 x 的背包,有几种方法呢?” -- 这是经典的问题了.她把答案记为 Count(i, x) ,想要…
dsu on tree 好吧,这个毒瘤...... 树剖和启发式合并的杂合体. 用于解决静态子树问题,复杂度O(nlogn * insert时间) 因为dsu是并查集的意思所以算法名字大概就是什么树上并查集之类的鬼东西. 因为dsu是并查集的意思所以函数名字看起来会很奇怪...... 主要思想是这样的: 首先仿照树剖搞出轻重子节点. dsu到一个点的时候,dsu所有的轻子树并消除影响. dsu重子树并保留影响,从重子节点那里继承答案. 计算自己的贡献. 插入所有轻子树并更新自己的答案. 如果自己…
今天是赵和旭老师的讲授~ 背包 dp 模型 背包 dp 一般是给出一些“物品”,每个物品具有一些价值参数和花费参数,要求 在满足花费限制下最大化价值或者方案数. 最简单几种类型以及模型: 0/1背包: 完全背包: 多重背包: 01背包 状态设置:dp [ i ][ j ] 表示前 i 个物品花了 j 的花费能选出物品的最大价值是多少: 状态转移方程: 如果我们选了第 i 个物品,那么前 i-1 个物品只能花 j - w [ i ] 的钱,再加上这个物品本身的价值: 如果我们不选的话,那么花费和前…
Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了.要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的.Speakless没有多少钱,总共只攒了n万美元.他将在m个学校中选择若干的(当然要在他的经济承受范围内).每个学校都有不同的申请费用a(万美元),并且Speakless估计了他得到这个学校offer的可能性b.不同学校之间是否得到offer不会互相影响.“I NEED A OFFER”,他大叫一声.帮帮这个可怜的人吧,…
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3626 题目大意:树中取点.每过一条边有一定cost,且最后要回到起点.给定预算m,问最大价值. 解题思路: 首先要注意这题要回到起点,由于树的特殊结构(每个结点只有一个父亲)也就是说,要回到开头, 开销是2倍.所以首先m/=2. 然后就是树形背包的求解,这题的cost在边,所以for写法变成如下: for(m....j....0)     for(0....k…
POJ :http://poj.org/problem?id=1384 ZOJ:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2014 题目大意: 给定一个猪的存钱罐,它的初始重量和装满的重量,给你n种货币(包括它们的重量和价值),要求求最坏情况下装满这个猪所能获得的钱 依旧是完全背包的问题. 只不过一开始只有什么都不装有合法解,其他均为无穷大,即一开始dp[0]=0 然后改为求min而不是max(题目要求最坏情况下)…
传送门: POJ:http://poj.org/problem?id=2063 ZOJ:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2224 大意:给你一堆本金,还有投资方案获得的利润.让你进行合理投资,要求若干年后获利最大. 完全背包问题.背包容量就是money,要尽量装满(不是风险投资哇,投资出去必获利) 开始天真的开了400多w(100万*1.1^40)的数组,直接TLE掉. 看了discuss里,因为给的利润为…
参考:http://blog.csdn.net/qian99/article/details/39138329 参考的链接里说明得很好,注释也很好...thanks for sharing 朴素的想法不难,dp[i][j][k]类似背包做法即可. 但朴素思想复杂度过高. 这里主要是用到 dif 那个变量,只枚举新增的集合. #include <cstdio> #include <cstring> #include <iostream> #include <algo…
多重背包模板- #include <stdio.h> #include <string.h> int a[7]; int f[100005]; int v, k; void ZeroOnePack(int cost, int weight) { for (int i = v; i >= cost; i--) if (f[i - cost] + weight > f[i]) f[i] = f[i - cost] + weight; } void CompletePack(…
http://poj.org/problem?id=1080 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=27 /* zoj 1027 poj 1080 思路: 三种状态,取最大值: s1[i]和s2[j]配 :dp[i-1][j-1]+cost[my[s1[i]]][my[s2[j]]]; s1[i]和'-' 配: dp[i-1][j]+cost[my[s1[i]]][my['-']]; s2[j]和'-' 配: dp[…
题目大意:JAVAMAN 到梦幻城市旅游见到了黄金树,黄金树上每天回结出金子.已经有n棵树,JAVAMAN要停留m天,每天只能砍掉一棵树,砍掉树后就能得到树上的黄金.给定n棵树上原有的黄金a[i]和每天可以新增加的黄金b[i],求他最多可以得到多少黄金.中途如果有1天不砍树的话,之后的日子久不能砍树,所有最好每天都砍树,或者直到树被砍完. 这个其实是个背包问题,把日期看成背包的容量.然后n棵树当成n个物品. 假设我们取得由某 m 棵树组成的最优解.如果先砍的树的b值比后砍的树的b值大, 那么我们…
///给你n 求他能分解成多少个的不同的k个素数相加之和 ///01背包,素数打表 # include <stdio.h> # include <algorithm> # include <string.h> # include <math.h> # include <iostream> using namespace std; int cot; int used[1500]; int prime[1500]; void sushu()///素数…
题目我就不贴了...说不定被查到要GG... 题意就是我们需要在P,A,C,M四个属性的限制下,找到符合条件的最优解... 这样我们就需要按照0/1背包的思路,建立一个五维度数组dp[i][j][k][l][o]但是很明显36^5可能不怎么够用,一般来说就两种思路,吧这种多维数组由int 开成 short,这样岂不是爽歪歪?或者降维嘛...这里滚动会降一维,可是不会滚动啊!!!-_-     滚动数组优化!!!我们在正向退DP时,子状态只会用很少的种类,这样前面好多都是没用的,我们来看看简单的0…
题目链接:https://vjudge.net/problem/ZOJ-3769 题意:现在你要去打怪,你有13种装备,每件装备会有伤害和防御两种属性,一般来说,每种装备只可以装备一件,但是特别的,戒指(Finger)你可以同时装备两个,左右手各一个,然后对于“Two-Handed”类的装备,如果你装备这种装备,那么你就不可以装备"Shield", "Weapon"这两种,反之,如果你装备了"Shield", "Weapon"…
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3769 题意:有13种装备,每种装备值可以穿戴一种,特殊的就是双手武器和单手武器,双手武器和单手武器+盾只能选择一种,戒指可以双手各戴一个.每个装备都有一个攻击值和防御值,现在要在防御值至少到达m的情况下可以达到的最大攻击力. 思路:分组背包题目. 把单手武器和盾组合起来放到双手武器当中,戒指也需要两两组合. 接下来就是一个分组背包了,比较重要的是这道题目需要开二维数组,因…
http://blog.csdn.net/woshi250hua/article/details/7824773 题目大意:从前有n座山,山里都有一座庙,庙里都有一个老和尚,老和尚专送纪念品,每个纪念品重量为cost[i],价值为val[i].n座山形成一张有m条边的有向图,某山道某某山都有距离dist[i].主角xx从st点出发,背着个容量为M的背包,想要收集最多的价值.但是主角体弱多病要顾及身体,每次背着重量为wi从某山走到某某山就要耗费dist[i]*wi的能量.最后能价值最多时最少的能量…