10 2018 档案
摘要:分析 $dp[i][j][k]$为枚举到前i个物品,容量为j的第k大解.则每一次状态转移都要对所有解进行排序选取前第k大的解.用两个数组$vz1[],vz2[]$分别记录所有的选择情况,并选择其中前k大的更新当前的dp[i][k].因为dp[i]满足递增的特点,所以可以对两个数组顺序比较选择.
阅读全文
摘要:题意 n天的课程,每天有m个时间单位.若时间i和j都有课,那么要在学校待$j i+1$个时间.现在最多能翘k节课,问最少能在学校待多少时间. 分析 将一天的内容视作一个背包的组,可以预处理出该天内翘k节课能得到的最多空闲时间.$val[i][k]$表示第i天中翘k节课能够获取最多的时间,暴力枚举左右
阅读全文
摘要:题意 n类工作,每类有m个独立的工作和属性s,s有必做一个,最多只能做一个和任意选择这三个属性.每个独立的工作有耗时和收益两个属性.求在t时间内的最大收益. 分析 令$dp[i][j]$表示在前i类任务j耗时内的最大收益.若不加属性s,就是一个单纯的分组背包.现在对不同的s,有不同的状态转移方程.
阅读全文
摘要:题意 有n件物品,每个物品属于特定的品牌,且价格和收益两个属性.每个品牌最多买1个东西,求最大收益. 分析 令$dp[i][j]$ 枚举前i个品牌,话费为j的最大收益.则分组背包有状态转移: $$dp[i][j] = max(dp[i][j], max(dp[i][j w]+v,dp[i 1][j
阅读全文
摘要:题意 给n个币的价值和其数量,问能组合成$1 m$中多少个不同的值。 分析 对$c[i] a[i] =m$的币,相当于完全背包;$c[i] a[i]=w; i) { dp[i] = Math.max(dp[i], dp[i w]+v); } } static void complete(int w,
阅读全文
摘要:题意 要构建一棵n个点的树,树的权值为所有结点的权值和,每个结点的权值为$f(d)$,d为结点的度数。 分析 n个结点的树,n 1条边,即度数和为2n 2。每个结点的度数至少为1,所以先令每个结点的度数为1。剩下n 2的的度数再分配掉,将这个过程转化为完全背包,每个度数可以出现的次数不限。dp[i]
阅读全文
摘要:题意:n件东西,有属性a和属性b。要选取若干件东西,使得$\frac{\sum a_j}{\sum b_j} = k$。在这个条件下,问$\sum a_j$最大是多少。 分析:可以将其转化为0 1背包,令$c[i] = a[i] k b[i]$ 等价于物品的重量,$a_i$为物品的价值。因为$c[i
阅读全文
摘要:题意:有N个银行,每抢一个银行,可以获得$v_i$的前,但是会有$p_i$的概率被抓。现在要把被抓概率控制在$P$之下,求最多能抢到多少钱。 分析:0 1背包的变形,把重量变成了概率,因为计算概率需要乘积而非加法,所以不能直接用dp[j]表示概率为j时的最大收益。 令$dp[i][j]$表示对前$i
阅读全文
摘要:南京的比赛过去一个星期里,一直在忙着补作业,没来得及写点东西。 12号中午出发,下午到了入住的酒店,之后我们三个人去南航校区那边吃了饭顺便转了转校园,不得不感叹有超多塑胶篮球场...晚上回了酒店之后看了两道题之后就睡了。 第二天热身,没想到赛场的电脑居然写代码会卡死,最后也就做了签到的B和C。B是一
阅读全文
摘要:实验三 哈夫曼编码 问题描述与实验目的: 给定n个字母(或字)在文档中出现的频率序列X=,求出这n个字母的Huffman编码。为方便起见,以下将频率用字母出现的次数(或称权值)w1,w2,…,wn代替。 输入 输入文件中的开始行上有一个整数T,(0=右儿子的权值; 3.相同权值w的两个字母x、y,先
阅读全文
摘要:题意:给一张由白边和黑边构成的无向图,求是否存在一个生成树,使白边的数量为一个斐波那契数。 分析:白边权值为1,黑边权值为0。求出该图的最小生成树和最大生成树,若这两个值之间存在斐波那契数,则可以,若不存在或者所给的图不是连通图,则不行。 include using namespace std; c
阅读全文
摘要:点边都带权的最大密度子图,且会有必须选的点. 求$\frac{\sum w_e}{k (2n k)}$的最大值,其中k为子图点数 设$$h(g) = \sum w_e g (2nk k^2)$$ 假设最优解为$g $,则当$g0$;$g g 时,h(g) using namespace std; c
阅读全文
摘要:题意:每个点i有$s_i$个人和$b_i$份食物,每个人都要找到一份食物.现在有M条有向边,从点i到点j,容量为c,第一次走过不要紧,从第二次开始就要承担$p(0 using namespace std; define eps 1e 7 const int MAXN = 10005; const i
阅读全文
摘要:题意:给一段子序列,定义密度:子序列中的逆序对数/子序列的长度 求这个序列的对大密度. 分析:将序列中的每个位置视作点,逆序对$$之间表示点i与点j之间有一条无向边.所以就转化为了最大密度子图的模型.
阅读全文
摘要:题意:给出N种类的数量,求是否可以把N种牌按3 5张连续的顺子打出,顺子必须连续. 分析:相当于把这个序列分成若干长度为[3,5]的区间,当然其实分成若干段大于3的区间即可.因为大于5的区间又可以分拆成若干段长度为[3,5]的区间. 令$b[i] = a[i] a[i 1]$, 则$b[i] 0$
阅读全文
摘要:题意:Bob和Alice在一张有向无环图上移动,给定二者的起点,Bob先手.Bob的失败条件是不能移动或者与Alice相遇.两个人都采取最优策略,求Bob是否会赢 分析:银牌题.先确定所有的失败状态,然后根据这些反向状态BFS. 用$dp[i][j][0or1]$表示bob在i点,Alice在j点,
阅读全文
摘要:题意:有N朵花,在M种颜色中选择恰好k种不同的颜色,将这N朵花染色,要求相邻的两朵花颜色不相同. 分析:若限制改为选择不超过k种颜色将N朵花朵染色,则方案数$f(N,k) = k (k 1)^{N 1}$,第一朵可以在k个颜色中任意选择,第二朵可以有k 1个选择,第三朵也有k 1.... 但是f(N
阅读全文
摘要:题意:求一个N个点无向图中,其中p个关键点间的最短距离. 分析:比较特殊的最短路,方式类似于多源BFS,将所有关键点装入优先队列,状态中需要包含其源点的id.对每条边都要遍历,对每个节点,需要记录其确定最短的源头以及其最短距离.当一个访问状态到达了与自己源头状态不同的点,则说明两个关键点相遇,每次相
阅读全文
摘要:题意:给你一张带权无向图,先求出这张图从点1出发的最短路树,再求在树上经过k个节点最长的路径值,以及个数. 分析:首先求最短路树,跑一遍最短路之后dfs一遍即可建出最短路树. 第二个问题,树分治解决. 对于以root为根的树,所求的路径只会有两种情况. 1) 存在于root的子树中,不经过root;
阅读全文
摘要:题意:给出序列前k项中的逆序对数,构造出这个序列. 分析:使用权值线段树来确定序列元素. 逆序对的数量肯定是递增的,从最后一个元素开始逆向统计,则$a[i] a[i 1]$即位置i之前比位置i上的数大的个数.则该位置的数应该是序列中第$i a[i]+a[i 1]$大的数,通过权值线段树查询全局第k大
阅读全文
摘要:题意:求母串中可以匹配模式串的子串的个数,但是每一位i的字符可以左右偏移k个位置. 分析:类似于 UVALive 4671. 用FFT求出每个字符成功匹配的个数.因为字符可以偏移k个单位,先用尺取法处理出每个位置能够取到的字符.设模式串长度为m. 令$C(m 1+k) = \sum_{i=0}^{m
阅读全文
摘要:题意:海明距离的定义:两个相同长度的字符串中不同的字符数.现给出母串A和模式串B,求A中有多少与B海明距离 using namespace std; typedef long long LL; const int MAXN = 4e5 + 10; const double PI = acos( 1.
阅读全文
摘要:因为给定的模数P保证是素数,所以P一定有原根. 根据原根的性质,若$g$是$P$的原根,则$g^k$能够生成$[1,P 1]$中所有的数,这样的k一共有P 2个. 则$a_i a_j(mod\ P)=a_k$ 就可以转化为$g^i g^j(mod\ P) = g^{i+j}(mod\ P)=g^k$
阅读全文