BZOJ4346 : [POI2016]Nadajniki】的更多相关文章

设$f[x][j]$表示$x$点不放无线,它的儿子里放了$j$个无线,且对$x$的父亲不作要求时的最小代价. $g[x][j]$表示$x$点不放无线,要求$x$的父亲至少放$j$个无线时的最小代价. $h[x][j]$表示$x$点放了$j$个无线时的最小代价. 然后从底向上树形DP即可,时间复杂度$O(n)$. #include<cstdio> #define rep(i,n) for(int i=0;i<n;i++) const int N=200010,M=400010; int n…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
4347: [POI2016]Nim z utrudnieniem Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 733  Solved: 281[Submit][Status][Discuss] Description A和B两个人玩游戏,一共有m颗石子,A把它们分成了n堆,每堆石子数分别为a[1],a[2],...,a[n],每轮可以选择一堆石子,取掉任意颗石子,但不能不取.谁先不能操作,谁就输了.在游戏开始前,B可以扔掉若干堆石子,但是必须保…
[BZOJ4345][POI2016]Korale Description 有n个带标号的珠子,第i个珠子的价值为a[i].现在你可以选择若干个珠子组成项链(也可以一个都不选),项链的价值为所有珠子的价值和.现在给所有可能的项链排序,先按权值从小到大排序,对于权值相同的,根据所用珠子集合的标号的字典序从小到大排序.请输出第k小的项链的价值,以及所用的珠子集合. Input 第一行包含两个正整数n,k(1<=n<=1000000,1<=k<=min(2^n,1000000)). 第二…
bzoj4345 POI2016 Korale 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4345 数据范围:略. 题解: 由于$k$的范围问题,我们很容易想到优先队列. 至于从每个状态怎么往下一个转移就是这个题的精髓. 我们先考虑第一问: 第一问没有字典序的限制,我们把所有的数按照从小到大排序. 堆里维护二元组$(Sum, id)$表示这种选取方式的和位$Sum$,最大下标为$id$. 它可以转移到$(Sum - a_{id} + a_…
首先特判全部都是A或者全部都是B或者$n=1$的情况. 然后把矩阵四周都填充上A,枚举一个块,分以下情况讨论: 1.在它四周选两个块扩展,此时平方暴力枚举即可. 2.在它四周选定一个方向扩展两步. 3.选择一个角落,斜着扩展一步,再扩展另一步. 时间复杂度$O(n^2)$. #include<cstdio> #define rep(i,l,r) for(int i=l;i<=r;i++) #define N 1010 int n,m,i,j,x,y,l,r,f[N][N],ans,t,q…
将石子从小到大排序,然后DP. 设$f[i][j][k]$表示考虑了前$i$堆的石子,当前扔掉的堆数模$d$为$j$,没有扔掉的石子的异或和为$k$的方案数. 因为石子排过序,所以转移的复杂度为$O(md)$. 对于空间的问题,注意到$f[i][j][k]$和$f[i][j][k\ xor\ a[i]]$的转移是互补的,于是可以同时处理,省去滚动数组,直接做到原地DP,当然$f[i][0][k]$要特别处理. 最后注意特判$n$是$d$的倍数的情况,此时答案应该减去$1$. #include<c…
只考虑第一问,将珠子按照价值从小到大排序,设排序后第$i$小的为$b[i]$,定义二元组$(x,y)$表示当前珠子的总价值为$x$,用的价值最大的珠子为$y$,用一个小根堆来维护所有状态.一开始往堆中加入$(b[1],1)$状态,然后每次取出堆顶元素$(x,y)$,可以扩展出$(x+b[y+1],y+1)$以及$(x-b[y]+b[y+1],y+1)$两个状态.如此重复,直至取满$k$个.这部分的时间复杂度为$O(k\log k)$. 对于第二问,设第一问的答案为$limit$,然后按字典序进行…
Description 有n个带标号的珠子,第i个珠子的价值为a[i].现在你可以选择若干个珠子组成项链(也可以一个都不选),项链的价值为所有珠子的价值和.现在给所有可能的项链排序,先按权值从小到大排序,对于权值相同的,根据所用珠子集合的标号的字典序从小到大排序.请输出第k小的项链的价值,以及所用的珠子集合. Input 第一行包含两个正整数n,k(1<=n<=1000000,1<=k<=min(2^n,1000000)). 第二行包含n个正整数,依次表示每个珠子的价值a[i](1…
Description A和B两个人玩游戏,一共有m颗石子,A把它们分成了n堆,每堆石子数分别为a[1],a[2],...,a[n],每轮可以选择一堆石子,取掉任意颗石子,但不能不取.谁先不能操作,谁就输了.在游戏开始前,B可以扔掉若干堆石子,但是必须保证扔掉的堆数是d的倍数,且不能扔掉所有石子.A先手,请问B有多少种扔的方式,使得B能够获胜. Input 第一行包含两个正整数n,d(1<=n<=500000,1<=d<=10). 第二行包含n个正整数a[1],a[2],...,a…