【题目】#6395. 「THUPC2018」城市地铁规划 / City
【题意】给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值。\(n \leq 3000,k \leq 10\)。
【算法】背包DP+Prufer序
首先每个点度x的价值g(x)可以暴力预处理。将每个点的度-1后,就不再有树形态这个限制了,只要n个点的度加起来是n-2即可,因为此时只要让所有还原后度不为1的点连通,度为1的叶子节点直接分配。
问题转化为n-2个大小为x价值为g(x+1)的物品,求容量为n-2的完全背包的最大价值,复杂度\(O(n^2)\)。
这里的背包有个问题,就是大小为0的物品也是有价值的(必须n个点都计算),我的方法是所有价值先减g(1),最后再加n*g(1)。

构造方案的时候可以用n^2数组记录,也可以一步一步找最优大小退容量(因为是完全背包),每个点向上一个点连边使度不为1的点构成一条链,再从后往前分配叶子节点。
注意:根节点没有向上的路径,但是为了方便背包DP依然减掉一个度,最后构造方案的时候默认第一个点为根节点不往上连边即可。
还有要特殊处理n=1和n=2的情况,\(0^0=1\)。

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=3010,MOD=59393;
int n,kind,as[20],g[maxn],f[maxn];
int main(){scanf("%d%d",&n,&kind);for(int i=0;i<=kind;i++)scanf("%d",&as[i]);if(n==1){printf("%d %d",n-1,as[0]);return 0;}for(int i=1;i<n;i++){int x=1;for(int j=0;j<=kind;j++){g[i]=(g[i]+x*as[j])%MOD;x=x*i%MOD;}if(i!=1)g[i]-=g[1];//}for(int i=1;i<=n-2;i++){for(int j=i;j<=n-2;j++){f[j]=max(f[j],f[j-i]+g[i+1]);}}printf("%d %d\n",n-1,f[n-2]+n*g[1]);//int x=n-2,id=0,y=n;while(x){for(int i=1;i<=x;i++)if(f[x-i]+g[i+1]==f[x]){x-=i;if(++id!=1)printf("%d %d\n",id-1,id);else i++;//for(int j=1;j<i;j++)printf("%d %d\n",id,y--);break;}}if(n==2)id++;printf("%d %d\n",id,id+1);//return 0;
}

有没有发现算法里还有”Prufer序“这一项?很有意思的是,上面推到的结论就是Prufer序的结论。
从Prufer序的角度来考虑,题目和带标号无根树、点度密切相关,可以想到只需要构造一个Prufer序使得各点度+1的价值最大就行了。
问题转化为n-2个大小为x价值为g(x+1)的物品,求容量为n-2的完全背包的最大价值,复杂度\(O(n^2)\)。

转载于:https://www.cnblogs.com/onioncyc/p/9052946.html

【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序相关推荐

  1. 在小树林飞也能又快又稳,这是港科大沈劭劼组的「猛禽」无人机重规划框架(这也符合我理想中的无人机,而且他们这说明这种室内避障无人机是可以做得很小的。)

    这也符合我理想中的无人机,而且他们这说明这种室内避障无人机是可以做得很小的. 摘自:https://mp.weixin.qq.com/s/xzY3GOLzd4fgy7Ff-cSigg 在小树林飞也能又 ...

  2. 【bzoj4753】[Jsoi2016]最佳团体 分数规划+树形背包dp

    题目描述 JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号.每个候选人都由一位编号比他小的候选人Ri推荐.如果Ri=0则说明这个候选人是JYY自己看上的.为了 ...

  3. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

    #2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 小 ...

  4. 「THUPC2018」赛艇 / Citing

    https://loj.ac/problem/6388 矩形匹配,小地图经过位置为1,和大地图匹配不能同时存在一个1的位置,就可以是一个当前位置 1.bitset压位,....O(n^2m^2/64) ...

  5. #6398. 「THUPC2018」生生不息 / Lives

    放一份爆搜代码(能跑过所有数据,5 5 在十分钟左右?): #include<bits/stdc++.h> #define rep(i,x,y) for(register int i = ...

  6. 【LOJ6178】 「美团 CodeM 初赛 Round B」景区路线规划 期望概率DP

    题目链接 LOJ 题解 考虑进行Dp,我们设 f[i][j] f [ i ] [ j ] f[i][j]表示到达节点 i i i消耗了j" role="presentation&q ...

  7. 「THUPC2018」生生不息 / Lives(状压 + 记忆化搜索 + 打表)

    题目链接:https://loj.ac/problem/6398 题目大意: 生命游戏是一个经典的零玩家游戏. 游戏在一块 n \times mn×m 的方格棋盘上进行,初始时,棋盘上的一些格子中有生 ...

  8. 「BJOI2019」奥术神杖(AC自动机+DP)

    文章目录 title solution code title solution 令Magic=Vi×Vj×Vk...Magic=V_i\times V_j\times V_k...Magic=Vi​× ...

  9. 「APIO2010」 特别行动队 - 斜率优化Dp

    题目描述 你有一支由nnn名预备役士兵组成的部队,士兵从1到nnn编号,要将他们拆分成若干特别行动队调入战场.出于默契考虑,同一支特别行动队中队员的编号应该连续,即为形如(i,i+1,...,i+k) ...

最新文章

  1. Scrapy框架CrawlSpider类爬虫实例
  2. 使用IIS组建PHP服务器
  3. win32: 查询滚动条相关信息的注意事项
  4. 超级干货:你应该知道的那些编程原则!!
  5. 点云处理软件Pointscene
  6. mysql重新构建自增长_mysql 建表后 重新构建 自增字段 (保留 原有字段结构)
  7. 在 SSD 上使用 btrfs 文件系统的相关优化
  8. VC2010 sp1修复补丁
  9. 【交易架构day9】阿里交易系统演进之路
  10. DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unico
  11. hive优化:大表关联数据倾斜问题
  12. “盛大游戏杯”—K 购买装备
  13. 【安信可首款4G模组CA-01直连阿里物联网平台②】一机一密认证方式连接
  14. 树莓派用root登陆_树莓派开启root用户权限
  15. 【转载】eMule电驴使用从入门到精通(4)-------电驴宗旨:我为人人,人人为我
  16. stored-program Computer/von Neumann Architecture 冯诺依曼体系结构
  17. 龙王我当定了(一个在QQ刷龙王的脚本)
  18. SuperSet连接mysql设置
  19. 最简单明了的QQ在线客服代码
  20. 判断设置了css省略号样式的元素是否出现了省略号

热门文章

  1. Exchange2007 中Send as 与Send on behalf of 讲解
  2. NFS简单应用场景及简单的环境搭建
  3. 数据中设计中的范式与反范式
  4. sed 每次只替换一行
  5. Android开发——内存优化 图片处理
  6. npm 发布包填坑指南
  7. 【转】Itween 贝塞尔曲线(一)
  8. 7.0、Android Studio命令行工具
  9. saltstack pkg模块用法
  10. symbol lookup error