【DP合集】tree-knapsack】的更多相关文章

dp合集 广场铺砖问题&&硬木地板 很经典了吧... 前排:思想来自yali朱全民dalao的ppt百度文库免费下载 后排:STO朱全民OTZ 广场铺砖问题 有一个 W 行 H 列的广场,需要用 1*2 小砖铺盖,小砖之间互相不能重叠,问 有多少种不同的铺法? 输入数据: 只有一行 2 个整数,分别为 W 和 H,( 1<=W, H<=11) 输出数据: 只有 1 个整数,为所有的铺法数. 样例: Floor.in 2 4 Floor.out 5 dfs.bfs...算了吧 然…
9.15 DP合集水表 显然难了一些啊. 凸多边形的三角剖分 瞄了一眼题解. 和蛤蛤的烦恼一样,裸的区间dp. 设f[i][j]表示i~j的点三角剖分最小代价. 显然\(f[i][i+1]=0,f[i][i+2]=w[i]*w[i+1]*w[i+2]\) 然后枚举i,j和哪个点剖. \[f[l][r]=min(f[l][r],f[l][i]+f[i][r]+w[l]*w[r]*w[i]) (l<i<r)\] // It is made by XZZ #include<cstdio>…
9.14 DP合集水表 关键子工程 在大型工程的施工前,我们把整个工程划分为若干个子工程,并把这些子工程编号为 1. 2. --. N:这样划分之后,子工程之间就会有一些依赖关系,即一些子工程必须在某些 子工程完成之后才能施工.由于子工程之间有相互依赖关系,因此有两个任务需要我们去完 成:首先,我们需要计算整个工程最少的完成时间:同时,由于一些不可预测的客观因素会 使某些子工程延期,因此我们必须知道哪些子工程的延期会影响整个工程的延期,我们把有 这种特征的子工程称为关键子工程,因此第二个任务就是…
题面 Description 给出一个 1 ∼ n (n ≤ 10^5) 的排列 P 求其最长上升子序列长度 Input 第一行一个正整数n,表示序列中整数个数: 第二行是空格隔开的n个整数组成的序列. Output 最长上升子序列的长度 Sample Input 7 1 7 3 5 9 4 8 Sample Output 4 题解 分析LIS的两种做法 第一种: 最朴素的DP方法,时间复杂度为O(n^2) 状态:f[i]表示以ai结尾的最长LIS的长度 转移:f[i]=max{f[k]+1}(…
题面 已知一个 1 ∼ N 的排列的最长上升子序列长度为 K ,求合法的排列个数. 好题(除了我想不出来我应该找不到缺点), 想一想最长上升子序列的二分做法, 接在序列后面或者替换. 所以对于每一个位置的数, 都只有三种状态, 分别是: 在我们的替换的序列中, 使用过却被序列抛弃的, 未使用过的. 考虑到数据范围比较小, 我们可以使用3进制的状压dp, 0代表未使用过, 1代表被抛弃的, 2表示在替换序列中的. 但是由于这是一个1到n的排列, 所以每个数都只能使用一次, 我们还要记录每个数是否使…
Description 给出一个 N 个节点的有根树,点编号 1 ∼ N ,编号为 i 的点有权值 v i .请选出一个包含树根的,点数 不超过 K 的连通块,使得点权和最大. Input 输入的第一行有二个整数 N , K ( K ≤ N ≤ 3000) . 接下来一行 N 个整数,第 i 个数描述编号为 i 的点的父亲编号,若该数为 0 ,则表示点 i 为树根. 接下来一行 N 个整数,第 i 个数描述编号为 i 的点的权值. Output 输出一行一个整数,描述最大的点权和.保证答案不会超…
给出 n 个物品,第 i 个物品有重量 w i .现在有 m 个背包,第 i 个背包的限重为 c i ,求最少用几个背 包能装下所有的物品. Input 输入的第一行两个整数 n, m ( n ≤ 24 , m ≤ 100) . 接下来一行 n 个整数,描述 w ( w i ≤ 10^8 ) . 接下来一行 m 个整数,描述 c ( c i ≤ 10^8 ) . Output 输出一行一个整数,描述最少需要使用的背包数.如果没有可行的方案来装下所有物品,请输出”NIE” (不含引号). 题解:O…
N 种物品,第 i 种物品有 s i 个,单个重量为 w i ,单个价值为 v i .现有一个限重为 W 的背包,求能容 纳的物品的最大总价值. Input 输入第一行二个整数 N , W ( N ≤ 1000 , M ≤ 10000) . 接下来 N 行,每行三个整数 s i,w i,v i ,描述一种物品. Output 输出一行一个整数,描述能容纳的物品的最大总价值.保证答案不会超过231−1231−1 . 题解: 单个单个枚举会超时,所以可以用二进制优化,就是因为如果我们可以将任意一个十…
给出一个 1 ∼ N 的序列 A ( A 1 , A 2 , ..., A N ) .你每次可以将两个相邻的元素合并,合并后的元素权值即为 这两个元素的权值之和.求将 A 变为一个非降序列,最少需要多少步操作. Input 输入的第一行一个整数 N ( N ≤ 5000) . 接下来一行 N 个整数,描述序列 A .保证序列 A 中的每个元素的值不超过 1000 . Output 输出一行一个整数,表示最少的操作数.   题解: 区间dp真的难,(。・∀・)ノ゙嗨! 好了,设dp[i][j]表示…
给出一张 n × n 的棋盘,格子有黑有白.现在要在棋盘上放棋子,要求: • 黑格子上不能有棋子 • 每行每列至多只有一枚棋子 你的任务是求出有多少种合法的摆放方案.答案模 109+7109+7 . Input 输入的第一行一个整数 n ( n ≤ 15) . 接下来一个 n × n 的棋盘( 1 表示黑 :0 表示白). Output 输出一行一个整数,表示合法方案数对 109+7109+7 取模后的结果. 题解: 其实这道题可能是由炮兵阵地改的,但没原题好,反正记忆化搜索就可以了. 代码:…