Inviting Friends Time Limit: 1 Second Memory Limit: 32768 KB You want to hold a birthday party, inviting as many friends as possible, but you have to prepare enough food for them. For each person, you need n kinds of ingredient to make good food. You…
POJ3111 K Best,看讨论区说数据有点变态,精度要求较高,我就直接把循环写成了100次,6100ms过,(试了一下30,40都会wa,50是4000ms) 第一次在POJ上看到下面这种东西还是很好奇的, 一个题目可以接受多种正确答案,即有多组解的时候,题目就必须被Special Judge.Special Judge程序使用输入数据和一些其他信息来判答你程序的输出,并将判答结果返回. Case Time Limit: 2000MS   Special Judge #include <c…
一开始看到题目感觉很难 然后看到题解感觉这题贼简单,我好像想复杂了 就算出每一行最少的资源(完全背包+二分)然后就枚举就好了. #include<cstdio> #include<algorithm> #include<cstring> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; const int MAXN = 212345; const int MAXM =…
Inviting Friends Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 241 Accepted Submission(s): 97 Problem Description You want to hold a birthday party, inviting as many friends as possible, but you…
U - Inviting Friends HDU - 3244 You want to hold a birthday party, inviting as many friends as possible, but you have to prepare enough food for them. For each person, you need n kinds of ingredient to make good food. You can use the ingredients in y…
思路:先说一下题意吧.就是给你n个文件大小为v,价值为c, 但是硬盘的大小为S, 而且要存的总价值大于等于p.问每次传输k大小的文件.问k的最大值是多少? 我们以k为二分对象. 直接讲检验函数吧. 假设每次传输x大小的文件,则我们可以要筛选出小于等于的文件.这些文件就像01背包问题中要装的物品一样,有体积v和价值c. 然后背包的大小为S,问最多能装多少价值的东西.是不是问题一下就转化了.这样的最大值sum>=p时,说明价值成立! #include<iostream> #include&l…
分数规划是这样一个东西: 给定若干元素,每个元素有两个属性值\(a_i,b_i\),在满足题目要求的某些限制下选择若干元素并求出\(\frac{\sum a}{\sum b}\)的最大值. 如果没有限制的话,肯定是贪心的选. 假设当前选择了一个解\(x_0\),却并不是\(\frac{\sum a}{\sum b}\)的最大值,我们有 \[\frac{\sum a}{\sum b}>x_0\] 进而 \[\sum a-bx_0>0\] 这时候我们要求的东西变成了\(a-bx_0\),每个元素的…
You are a given a list of integers a 1 ,a 2 ,…,a n  a1,a2,…,an and s s of its segments [l j ;r j ] [lj;rj] (where 1≤l j ≤r j ≤n 1≤lj≤rj≤n ). You need to select exactly m m segments in such a way that the k k -th order statistic of the multiset of a i…
打表出奇迹!表打出来发现了神奇的规律: 1 1 2 2 3 4 4 4 5 6 6 7 8 8 8 8 9 10 10 11 12 12 12 13 14 14 15 16 16 16 16 16... 嗯嗯嗯?没有规律?我们把每个数出现的次数列出来: 2 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 然后惊觉表中的数字是连续的,每个都至少有一个,而分解因数中有只要2的幂,有一个就会加一,比如8是2.4.8的倍数,在1的基础上会多三个.(1和2除外) 所以对于一个位置$x$,我们可…
01分数规划,二分答案然后把判别式变成Σp[i]-Σs[i]*mid>=0,然后树上背包判断,设f[i][j]为在i点子树里选j个的最大收益,随便背包一下就好 最丧病的是神卡常--转移的时候要另开一个一维g来转移,然后限制<=k,因为再大就没用了,还有把max变成?:的形式-- #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=2505…
题目描述 给你n种硬币,知道每种的面值Ai和每种的数量Ci.问能凑出多少种不大于m的面值. 输入 有多组数据,每一组第一行有两个整数 n(1≤n≤100)和m(m≤100000),第二行有2n个整数,即面值A1,A2,A3,…,An和数量C1,C2,C3,…,Cn (1≤Ai≤100000,1≤Ci≤1000).所有数据结束以2个0表示. 输出 每组数据输出一行答案. 样例输入 3 10 1 2 4 2 1 1 2 5 1 4 2 1 0 0 样例输出 8 4 背包问题的复杂度是n*m,这题如果…
Problem Description Marsha and Bill own a collection of marbles. They want to split the collection among themselves so that both receive an equal share of the marbles. This would be easy if all the marbles had the same value, because then they could…
这个题目给定N航班的发出时间和结束时间以及价值,要求不冲突时间的最大价值 第一时间想到经典的N方DP,即对航班按发出时间排一下序之后每个i对前面的都扫一遍 时间过不了N有10万,只能想优化了,一开始想了个用树状数组记录每次加入某个航班之后 后面的所有在结束时间后的区间全部可以加一个最大值,但是首先时间区间的量更大,而且树状数组不好这么操作 后来实在没见过这种DP,还是看的别人的算法,还是挺叼的,不过其实还是沿用的背包思想 对于每个航班区间,我只需要考虑取或者不取,这样的话,对航班按出发时间S排序…
V3其实和dp关系不大,思想挂标题上了,丑陋的代码不想放了.…
★.背包求方案数的时候,多重背包是不行的,因为产生重复的背包会有多种情况. ★.背包记录路径的时候,其实是不行的,因为更新了12的最优解,如果它依赖于6这个背包,然后你后面改变了6这个背包,就GG 1.01背包问题. tot:总背包空间,vall[i]:每件物品的价值,w[i]:每件物品的重量 http://acm.hdu.edu.cn/showproblem.php?pid=2602 01背包明显可以只写一维的,所以二维的就不写了. 关于为什么可以只写一维的呢?这就和你枚举的顺序有关了.从to…
描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒.所以他在垒城堡的时候总是遵循这样的规则. 小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度.为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了获得更漂亮的城堡而引起争执.可是他发现自己在垒城堡的时候并没有预先考虑到这一点.所以他现在…
http://www.lydsy.com/JudgeOnline/problem.php?id=1082 题意:n个给出木板,m个给出木板.可以将那m个木板锯成泥想要的长度.问最大能锯成多少个给出的n个木板.(n<=1000, m<=50) #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #inclu…
题意:给你n个数,在里面取4个数,可以重复取数,使和不超过M,求能得到的最大的数是多少: 思路:比赛时,和之前的一个题目很像,一直以为是体积为4(最多选择四次)的完全背包,结果并不是,两两求和,然后二分枚举; 完全背包是固定的体积,然后尽量使得装下的重量最大: 这个题目是固定的体积,但求在不超过该重量的情况下能得到的最大值. 至于为啥不是完全背包到现在还找到一个反例,以后再修改: 不过看到一共选择四次的时候,就应该想到是暴力... 比较相似的一个题目,12年的省赛题目:http://acm.sd…
link:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3623 看起来像完全背包,但是物品价值是变化的,所以很多人搞的很复杂. 晚上的代码要么很复杂,有一个代码虽然很简洁在zoj可以过,但是是错误的.求教lyl神犇,果然思想很深刻,抓住乐问题的本质,想法比网上搜到的所有博客里面的做法都简洁. 事实上,就是简单的DP,抓住一个技巧:让时间倒流,也就是说,把时间反过来考虑,先在将来把船造好,然后在过去用船攻击,哈哈,太巧秒…
http://acdream.info/problem?pid=1726 官方题解:http://acdream.info/topic?tid=4246 求n个数里面能不能选一些数出来让它们的和等于k. 因为k很大,不能用背包,但是n很小,最大为40,所以拆成了2部分,之后最大为2^20次方<1050000;每次枚举前一半的和,然后用数组存储,然后得到一个总和减去后一半的差用二分查找. #include<cstdio> #include<cstring> #include&l…
题意 有n个城市,m个边界线,p名士兵.现在士兵要按一定顺序攻占城市,但从一个城市到另一个城市的过程中不能穿过边界线.士兵有一个容量为K的背包装粮食,士兵到达一个城市可以选择攻占城市或者只是路过,如果攻占城市,就能装满背包.从城市到城市消耗的粮食等于两城市的距离,如果距离大于士兵当前的背包的容量,士兵就不能走这条路.士兵可以选择空降一次,空降不耗费.求p个士兵攻占所有城市所需要的最小背包容量k. 来源:2013 暑期多校联合训练 第一场 思路 非常好的一道比较综合的题目~首先我们能想到这是可相交…
题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为Vi,价值为Wi,每个物品要么至多取1件,要么至多取mi件(mi > 1) , 要么数量无限 , 在所装物品总体积不超过V的前提下所装物品的价值的和的最大值是多少? 输入描述 Input Description 第一行两个数N,V,下面N行每行三个数Vi,Wi,Mi表示每个物品的体积,价值与数量,Mi=1表示至多取一件,Mi>1表示至多取Mi件,Mi=-1表示数量无限 输出描述 Output Descriptio…
多重背包.本题不须要二分优化.相对简单点.由于反复数十分小,小于10. 而添加一个限制每种材料的高度做法.假设使用逆向填表,那么仅仅须要从这个高度往小递归填表就能够了. 还有就是注意要排序,以限制高度为标准从小到大排序.否则答案错误的. #include <stdio.h> #include <string.h> #include <algorithm> using std::sort; const int MAX_K = 401; const int MAX_H =…
题目链接:http://acm.swust.edu.cn/problem/838/ Time limit(ms): 1000 Memory limit(kb): 10000 Description 我们定义了这个一个函数: void Judge(int x, int &A, int &B, int &C) { int i; ; A<x; A++) ) { B = x / A; break; } C = ; ; i <= x; i++) ) C++; } 对于每一个非素数…
一.问题描述 0-1背包问题,部分背包问题.分别实现0-1背包的DP算法,部分背包的贪心算法和DP算法. 二.算法原理 (1)0-1背包的DP算法 0-1背包问题:有n件物品和一个容量为W的背包.第i件物品的重量是w[i],价值是v[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大.其中每种物品只有一件,可以选择放或者不放. 最优子结构性质:对于0-1问题,考虑重量至多W的最值钱的一包东西.如果去掉其中一个物品j,余下的必是除j以外的n-1件物品中,可以带走的重量…
Problem A: An easy problem Description Peter Manson owned a small house in an obscure street. It was a weather-beaten tenement of wood, containing some six or eight rooms, all of which, with one exception, were given over to dirt, cobwebs, gloom, and…
水dp第二天(背包有关) 标签: dp poj_3624 题意:裸的01背包 注意:这种题要注意两个问题,一个是要看清楚数组要开的范围大小,然后考虑需要空间优化吗,还有事用int还是long long 代码: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 13000; int W[N],D[N]; int dp[N]; int main(…
今天模拟赛有一道林克卡特树,完全没有思路 赛后想了一想,不就是求\(k+1\)条不相交的链,使其权值之和最大嘛,傻了. 有一个最裸的\(DP\),设\(f[i][j][k]\)表示在以\(i\)为根的子树中,选了\(j\)条链,\(k=0\)表示\(i\)不在链上,\(k=1\)表示\(i\)是链的一端,\(k=2\)表示\(i\)在链的中间 这样就随便转移了,就是个\(O(nk^2)\)的树上背包 然后呢,又傻了,这能怎么优化? 我先在这里Orz一下大佬BLUESKY007,没有学过wqs二分…
题目描述 蛤布斯有nn个物品和一个大小为mm的背包,每个物品有大小和价值,它希望你帮它求出背包里最多能放下多少价值的物品. 输入数据 第一行两个整数 n,mn,m. 接下来 nn 行每行两个整数 xi,wixi,wi,表示第ii个物品的大小和价值. 输出数据 一行一个整数表示最大价值. 样例输入 5 100 95 80 4 18 3 11 99 100 2 10 样例输出 101 数据范围 对于20%20%的数据,xi≤1500xi≤1500. 对于30%30%的数据,wi≤1500wi≤150…
论文 提出问题 在某些题目中,强制规定只能选 \(k\) 个物品,选多少个和怎么选都会影响收益,问最优答案. 算法思想 对于上述描述的题目,大部分都可以通过枚举选择物品的个数做到 \(O(nk^2)\) 或 \(O(nk)\) 的 \(\mathrm{DP}\),如果没有选择个数的限制的话,复杂度大概会降为 \(O(n)\) 级别. 先不考虑数量限制. 假设要最小化权值. 还是拿题说吧:给定长度为 \(n\) 的正整数序列,要求将该序列划分为 \(k\) 段,记每段之和为 \(sum(i)\),…