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…
链接:https://www.nowcoder.com/acm/contest/119/F来源:牛客网 Now HUST got a big land whose capacity is C to plant trees. We have n trees which could be plant in it. Each of the trees makes HUST beautiful which determined by the value of the tree. Also each of…
Rikka with Subset Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1122    Accepted Submission(s): 541 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation…
题目链接:http://codeforces.com/contest/688/problem/E 题解:设dp[s1][s2]表示s1状态下出现s2是否合理.那么s1显然可以更具01背包来得到状态.首先看一下转移方程 if(dp[i-a[k]][j]) => (1)dp[i][j]=dp[i-a[k]][j], (2)dp[i][j+a[k]]=dp[i-a[k]][j] 解释(1),(2) 怎么得到的:当i-a[k]的状态存在那么显然可以推到i这个状态,那么j这个状态要么加上a[k]要么不加a…
dp[i][j]表示前i个元素,子集和为j的个数.d[i][j] = d[i][j] + d[i-1][j-k] (第i个元素的值为k).这里可以优化成一维数组 比如序列为 1 2 3,每一步的dp值为 1 0 0 0 0 0 0 (d[0][0]=1) 1 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 2 1 1 1 最终的序列就是题目给出的B序列,把B序列减去每一次dp得到的序列,第一个非0值就是a序列中的值 #include <cstdio> #include <…
题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3956 题意 给出N组Hi Ci 然后 要选出若干个 使得 这个式子的值最大 然后是可以不选的,这个式子的值就是0 思路 因为 Ci 的范围特别小,我们就可以用Ci 来当做容量 进行01背包 其实在做题的时候有一个问题 就是 ci 并不是连续的 如果 给出一组数据 3 10 1 5 1 2 10 那个ci 的最大就是 12 但是 其实有效值 能够选择的 Ci 其实…
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3956 题意:就是给你Hi,Ci的值,问怎么取使得下面那个式子的值最大: 理解:当时做了好久以为是贪心>_<.后来看别人的题解发现是01背包,现在学了01背包以后看就好理解多了. 因为每个值都是取或不取,所以容易想到是01背包.而且Hi的范围是[1,10000],Ci的范围是[1,100],n是[1,500],所以明显可以发现Ci适合做“物品体积”,Hi做“物品价值”,Σ…
Course Selection System 比赛的时候最后20分钟想到了是01背包,奈何没时间推出怎么背. 题意:n门课程,每门课程都有一个h值和c值,现在给出一个happy的定义,所选的课程的h的和H,c的和C,happy=H^2-C^2-HC.求happy的最大值. 思路:开始以为是贪心,但感觉没有贪心这么简单,在这个问题中每门课程都有选或不选两种情况,很容易就想到01背包,但是状态方程不好求,此方程等价:H(H-C)-C^2.即H越大,值越大.注意到c的和也只有50000,我们可以用c…
http://acm.fzu.edu.cn/problem.php?pid=2214 Accept: 4    Submit: 6Time Limit: 3000 mSec    Memory Limit : 32768 KB  Problem Description Given a set of n items, each with a weight w[i] and a value v[i], determine a way to choose the items into a knapsa…
Robberies  HDU2955 因为题目涉及求浮点数的计算:则不能从正面使用01背包求解... 为了能够使用01背包!从唯一的整数(抢到的钱下手)... 之后就是概率的问题: 题目只是给出被抓的几率,如果同时抢两家银行的话,那么被抓的概率是: (1-一家不被抓的概率*另一家不被抓的概率) 才是同时抢两家被抓的概率! 最后和题目给出的概率比较取较大值... 那么赋初值的时候dp[0]=1. 注意:不要误以为精度只有两位. #include<iostream> #include<std…