随笔分类 - ACM相关-动态规划
摘要:题解 题意 给出一个无向图,求遍历所有点的最小花费 分析 1.BFS,设置dis[status][k]表示遍历的点数状态为status,当前遍历到k的最小花费,一次BFS即可 2.使用DP 代码 //BFS class Solution { public: int dis[1 & graph) {
阅读全文
摘要:"传送门" 题意 计算$C_{n m}^k/可行方案数$ 分析 定义dp[i][j][k]为第i行用过人数为j个且第i行状态为k的方案数 转移方程:dp[i][j][k]=Σdp[i 1][j num][与k不冲突的状态] trick 注意开long long 注意输出处理 代码 include u
阅读全文
摘要:"传送门" 题意 分析 设dp[i][j]为在i状态下当前在第j个奶酪的最小费用 转移方程:dp[(1不以获取奶酪为目标的移动是无意义的 预处理出起点、终点以及奶酪之间的最短路径𝑫𝒊𝒔𝒕[𝒊][𝒋] 起点的编号为𝐾,终点的编号为𝐾+1 𝒇[𝟎≤𝒊 using namespace
阅读全文
摘要:"传送门" 题意 给出n个工程,m个工程师,每个工程和工程师需要/拥有若干个技能,询问能够完成的最大工程个数,每个工程师用一次 分析 dp[i][j]表示前i个工程用的工程师集合为j的最大工程个数,那么有dp[i][j]=max(dp[i 1][j],dp[i 1][j^x]+1),用way[i]记
阅读全文
摘要:"传送门" 题意 给出三个集合,每个集合的元素数量为a,b,c,现在需要连边,满足集合内元素不可达或最短路为3,求可行方案数 分析 设dp[i][j]为a集合元素为i个,b集合元素为j个的可行方案,易知(a,b),(b,c),(c,a)的方案是独立的,且可行方案为a b c,或旋转形式,那么就求一个
阅读全文
摘要:"传送门" 题意 将n个数分成m个集合,$V_i表示max(x y),x,y∈第$i个集合,$求minΣV_i$ 分析 我们先对难度排序,令dp[i][j]表示前i个数分成j个集合的最小费用 转移方程为 $$dp[i][j]=min(dp[k][j 1]+(a[i] a[k+1])^2,dp[i][
阅读全文
摘要:"传送门" 题意 给出n种物品,抢救第$i$种物品花费时间$t_i$,价值$p_i$,截止时间$d_i$ 询问抢救的顺序及物品价值和最大值 分析 按$d_i$排序的目的是防止以下情况 4 8 100 1 2 100 不排序只能选择第一个物品 (请仔细思考) 那么排序后做一遍背包, 排序后选择顺序必定
阅读全文
摘要:分析 很多个较小的数字可以随机组合成较大的数字,所以B数组从小到大开始遍历,除了空集,最小的那个存在的个数对应的数字必然是a数组中的数字。 每求出这一部分之后,更新后续的B序列。 分析完后,主要的难点就是怎么去让已求出来的A序列随机组合,更新后续的B序列直接减就可以了。看成01背包问题,让m为背包去
阅读全文
摘要:分析 首先声明一下,我的代码有漏洞的,求大神给个正确代码 思路如下: 首先做一遍01背包记录路径并求出最大总分,令path[i][j]表示第i个物品包含在dp[j]的求值过程中.再逆序枚举money,如果dp[money]为最大总分,那么用c[num][j]保存物品并排序,并用mark记录序号最小并
阅读全文
摘要:分析 挺好的一道题 dp[i][j]表示打败i颗血j防御力的怪兽需要的最少宝石数 然后就好了,复杂度$O(n+m 1000 10)$ include using namespace std; define ll long long define F(i,a,b) for(int i=a;i
阅读全文
摘要:Hmz 的女装 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 190 Accepted Submission(s): 92 Problem
阅读全文
摘要:"传送门" 题意 在一条直线上有n个教室,现在要设置糖果店,使得最后成本最小,满足以下两个条件: 1.若该点为糖果店,费用为cost[i]; 2.若不是,则为loc[i] 最近的糖果店的loc 分析 dp方程不好想,我们观察一下,如果在第i个点设置最后一个糖果店,那么它将影响到它之前的糖果店,那么第
阅读全文
摘要:"传送门" 题意 给出n个体积为wi,价值为ci的物品,现在有一个m大的背包 问如何装使得最后背包内的物品价值最大,输出价值 分析 一般的思路是01背包,但n v不可做 题解的思路 We can iterate on the number of 3 elements we will take (in
阅读全文
摘要:"传送门" 题意 分析 dp[12][20][20][20]; // dp[a][b][c][d]第a个弓箭手面临第a 1、a、a+1个弓箭手的生命值分别为b、c、d的状态 转移巧妙,需注意 trick 代码
阅读全文
摘要:"传送门" 题意 Roma在玩一个游戏,一共玩了n局,赢则 bourle+1 ,输则 bourle 1 ,Roma将会在以下情况中退出 1.他赢了k个bourle 2.他输了k个bourle 现在给出一个字符串 'L':lose 'W':win '?':任意 'D':平局 输出一个字符串满足条件(R
阅读全文
摘要:"传送门" 题意 给出n个任务的结束时间和持续时间,完成一个任务扣掉的分数为 完成时间 结束时间 ,问最少扣掉多少分数 分析 观察到n为15,那么 我们将任务完成情况保存为状态,dp[i]表示到达i状态所扣的最少分数。 dp[i]由哪些状态到达? 枚举任务,对于第k个任务,在j中对于i中的任务只有k
阅读全文
摘要:题目链接: D. Phillip and Trains 分析:dp 我们先初始化,dp[i]表示当前列第i行是否可达,r[i]表示上一个dp值,接下来从头搜到尾 如果该位置满足s[i+1]=='.'且i<n,则用r[i]更新该位置的上面和下面一行,所以这是为什么数组开dp[5],r[5], 再判断该
阅读全文
摘要:题目链接: A.Memory and Crow<!-- --><!-- --> B.Memory and Trident<!-- --><!-- --> C.Memory and De-Evolution<!-- --><!-- --> D.Memory and Scores<!-- --><!--
阅读全文
摘要:题目链接:Fast Food 题意:一条直线上有n个饭店,问建造k个原料厂(仍旧在商店位置)得到的最小距离 分析:见代码 //一条直线上有n个饭店,问建造k个原料厂(仍旧在商店位置)得到的最小距离 //首先预处理从i到j的最小距离,可以知道选的点必为(i+j)/2,所以用dis[i][j]记录距离
阅读全文
摘要:题目链接:反恐训练营 题意:本质上是求最大公共子序列,然后加上一个权值 分析:见代码 //公共子序列问题 //dp[i][j]表示前s1的前i个与s的前j个匹配得到的最大公共子序列 #include<cstdio> #include<cstring> #include<algorithm> usin
阅读全文