摘要: 大力剪枝,最后洛谷上还开了o2才过…… 大概这样剪枝: 1.搜索中,一个队当前得分超过要求或者一个队剩下的比赛场数全赢也达不到要求则return; 2.注意到如果平局,最总分的贡献是2,否则是3,所以可以计算出非平局的常数,dfs中记录一下当前非平局有几场,如果超出要求或者剩下的场次全都非平局也达不 阅读全文
posted @ 2018-09-05 15:01 lokiii 阅读(349) 评论(0) 推荐(0)
摘要: 状压dp,设f[i][j][0/1]为前i个时间段换了j间教室的期望体力消耗,转移很好想(但是写起来好长= =) cpp include include using namespace std; const int N=2005; int n,m,v,e,c[N],d[N]; double k[N] 阅读全文
posted @ 2018-09-05 10:53 lokiii 阅读(108) 评论(0) 推荐(0)
摘要: 裴蜀定理:若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。 所以最后能得到的最小燃料书就是gcd,所以直接对因数计数然后找最小的个数大于k的因数就是答案 阅读全文
posted @ 2018-09-05 10:37 lokiii 阅读(114) 评论(0) 推荐(0)
摘要: 先写了个next_permutation结果T了,于是开始写状压 设f[s][i]为选取状态为s,选的数模d为i的方案数,去重的话直接除以每个数字的出现次数的阶乘即可 cpp include include include using namespace std; const int N=20; i 阅读全文
posted @ 2018-09-05 10:23 lokiii 阅读(141) 评论(0) 推荐(0)
摘要: d[u]为u被几个节点保护,d1[u]为最早到u的时间,d2[u]为u的最早可进入时间(保护点都被打下来了的时候),然后最终最早进入时间就是max(d1[u],d2[u]),把这个作为权值放进小根堆,每次用这个max+e[i].va和d1取min更新d1,然后用max和当前d==0的点取max更新这 阅读全文
posted @ 2018-09-05 07:53 lokiii 阅读(129) 评论(0) 推荐(0)