摘要: 首先按x从小到大排序,那么可得: f[i]=min{f[j]+x[i]*maxy[j+1..i]} 然而这样是$O(n^2)$的而且无法做优化。 然后我们考虑:如果对于某一点,存在另一点的x和y都比它大,那这个点是可以删掉不参与计算的(因为那个较大的点一定要被买,那只要把这两点放在一组里,较小的点是 阅读全文
posted @ 2018-08-10 21:08 Ressed 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 首先推一波公式: 设f[t][i]为第t天以i为结尾,这时已经算了的最小公差$*m^2$ 设s[i]为1到i的和 $$f[t][i]=min\{f[t-1][j]+m*(s[i]-s[j]-\frac{s[n]}{m})\}^2$$ $$f[t][i]=min\{f[t-1][j]+\frac{(s 阅读全文
posted @ 2018-08-10 20:58 Ressed 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 设: sw[i]为1..i的w之和 sd[i]为1到i的距离 cost[i]为把第一个锯木厂建在i带来的花费 all[i,j]为把i..j所有木头运到j所需要的花费 所以$all[i,j]=cost[j]-cost[i-1]-sw[i-1]*(sd[j]-sd[i-1])$ 我们设第2个锯木厂建在i 阅读全文
posted @ 2018-08-07 10:01 Ressed 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 题意:给n张牌,让你取出不包括两端的n-2张,每次取出时会获得相当于该牌和相邻两牌点数成绩的分数,要求最终分数最小 设f[i][j]为抽光区间[i,j]所获得的最小分数,然后 f[i][j]=min{f[i][k-1]+f[k+1][j]+val[i-1]*val[k]*val[j+1]},i<=k 阅读全文
posted @ 2018-08-02 21:30 Ressed 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 题意:给n堆石子,每次合并相邻两堆,花费是这两堆的石子个数之和(1和n相邻),求全部合并,最小总花费 若不要求相邻,可以贪心地合并最小的两堆。然而要求相邻就有反例 为了方便,我们可以把n个数再复制一遍,放到第n个数后,就不用考虑环的问题了 我们设f[i][j]为合并区间[i,j]所需要的最小花费,然 阅读全文
posted @ 2018-08-02 21:16 Ressed 阅读(312) 评论(0) 推荐(0) 编辑
摘要: tarjan缩点后,第一问答案显然是入度为零的点得个数第二问:考虑到 没有入度或出度为0的点 的图强连通, 所以答案就是max{入度为零的个数,出度为零的个数} (把出度为零的连到入度为零的点,然后剩下为零的随便连一连就可以) 阅读全文
posted @ 2018-08-02 20:16 Ressed 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 求(m*10^k+x)%n即可 阅读全文
posted @ 2018-08-02 20:12 Ressed 阅读(157) 评论(0) 推荐(0) 编辑
摘要: tarjan缩点,然后按照拓扑序,做1号点能到达的点的答案具体做法是对每个点记一个min[i],max[i],vis[i]和ans[i]做拓扑序的时候,假设在从u点开始做,有边u到v,如果vis[u]=1,则则 vis[v]=1(初始时vis[bel[1]]=1); 更新在v点及以前买进的最小进价: 阅读全文
posted @ 2018-08-02 20:10 Ressed 阅读(299) 评论(0) 推荐(0) 编辑
摘要: 缩完点后对每次询问做dijkstra即可 阅读全文
posted @ 2018-08-02 20:07 Ressed 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 题意:给一个有向图,问要从0号点能到达所有点所需要经过路径的最小权值和是多少,然而,若两点强联通,则这两点互相到达不需要花费。保证0号点能到达所有点 tarjan缩点以后直接取每个点入边中花费最小的即可。 阅读全文
posted @ 2018-08-02 20:03 Ressed 阅读(231) 评论(0) 推荐(0) 编辑