2022.1.20

T1【GDKOI2007】大航海

有n个黑点,m个白点,有一些连接黑点和白点的边,现在从任意一个点出发,沿着边走,要求不能经过重复的点,且不能经过编号小于等于已走过的点,求经过的点的最大权值和。

一个朴素的dp,设fi,j,0/1f_{i,j,0/1}fi,j,0/1表示黑点走到i,白点走到j,现在在i或j的最大价值。转移显然。

但是这样时间空间都无法承受,但我们发现fi,j,0f_{i,j,0}fi,j,0fk,j,1(k<i)f_{k,j,1}(k<i)fk,j,1(k<i)转移。这一部分只需要在枚举到j的时候记录最大值即可。

fi,j,1f_{i,j,1}fi,j,1fi,k,0(k<j)f_{i,k,0}(k<j)fi,k,0(k<j)转移,这一部分与i有关,那么枚举j的过程其实也就会枚举到k,拿个变量记录最大值即可。

这时你发现f没用了。

比赛刚开始并没有想到,后来再列了一下式子才观察到。以后有dp的题还是要列一下转移式

T2 【GDKOI2007】纳克萨玛斯

给n个人,每个人擅长一些技能,而且每个人属于0或1,现在要求把这些人分成若干个组,使得每个组都有一个人负责一个位置,且每个人只能负责一个位置,问最多能组成多少个组?还要保证被选中的人中0的数量与1的数量之差,不超过D。

刚开始是想网络流,之后就想到了二分,但是我在建图的时候特别傻,想要直接建mid∗summid*summidsum个点,这很脑残,其实只要建m个点每个点流向汇点mid的流量。但是不知道D的限制怎么搞。其实只要建一个两个点,一个连0点,一个连1点,容量设为(mid∗sum+d)/2(mid*sum+d)/2(midsum+d)/2,这样就保证了不会超过d。二分即可通过。

T3 【GDKOI2007】轰炸

给数轴上的n个点的坐标和防御值,现在有m个炸弹,给出炸的范围以及炸弹的破坏值,没有被破坏的点如果在范围内且防御值小于破坏值的会被炸掉,求每个炸弹能炸的点的数量。

因为每个点只会被炸一次,所以可以用线段树维护区间最小值,每一次暴力往下删点,如果区间最小值大于破坏值,则不往下递归,删完点后更新最小值。时间复杂度为O(nlogn)O(nlog_n)O(nlogn)

T4【NOI2017模拟7.1】景中人

给定平面上的n个点,要求用最少的矩形覆盖这n个点,要求矩形面积不超过s,且有一边在x轴上。

先对点离散化和排序,设fi,jf_{i,j}fi,j表示覆盖编号为i到j的点需要的矩形数量。如果可以直接用一个矩形覆盖则赋值为1,否则先用一个矩形覆盖,然后矩形上方的点用一个dp,来计算。设gkg_{k}gk表示i~k中在矩形上的点以被其他点覆盖用的最小矩形数。转移为gk=ming[t−1]+ft,k(yt>Y)g_{k} = min{g[t - 1]+f_{t,k}}(y_t > Y)gk=ming[t1]+ft,k(yt>Y),Y为矩形的高度。最后转移一下即可。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值