摘要: update:2019.3.13 代码如下 cpp include using namespace std; const int maxn=1e7+10; int n,m; bool vis[maxn]; void read_and_parse(){ scanf("%d%d",&n,&m); vis 阅读全文
posted @ 2018-12-06 23:17 shellpicker 阅读(510) 评论(0) 推荐(0) 编辑
摘要: 核心思想:每个和数都被自己最小的素数因子筛掉。 代码如下 cpp include using namespace std; const int maxn=1e7+10; int n,m,p[maxn 3],cnt; bool vis[maxn]; void read_and_parse(){ sca 阅读全文
posted @ 2018-12-06 23:10 shellpicker 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定一个大小为 N 的集合,每次可以从中挑出 2 个或 3 个数进行合并,合并的代价是几个数的权值和,求将这些数合并成 1 个的最小代价是多少。 引理:K 叉哈夫曼树需要保证 $(n 1)\%(k 1)=0$,在此基础上,每次取 K 个合并即可得到最小代价。 代码如下 cpp includ 阅读全文
posted @ 2018-12-06 16:55 shellpicker 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定一个 N 个点的无向完全图,边有两个不同性质的边权,求该无向图的一棵最优比例生成树,使得性质为 A 的边权和比性质为 B 的边权和最小。 题解:要求的答案可以看成是 0 1 分数规划问题,即:选定一个数 mid,每次重新构建边权为 $a[i] mid b[i]$ 的图,再在图上跑一遍最 阅读全文
posted @ 2018-12-06 15:27 shellpicker 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定一个长度为 N 的序列,点有点权,从序列中选出恰好 X 个数,并且保证任意连续的 K 个数中均有一个被选中,求选出的点权最大是多少。 题解:此题可以作为 烽火传递+ 来处理,只不过在烽火传递的基础上加了选出恰好 X 个数,因此只需在状态维度上加上一维选出的个数即可,$dp[i][j]$ 阅读全文
posted @ 2018-12-06 00:19 shellpicker 阅读(200) 评论(0) 推荐(0) 编辑