摘要:
题意: 给出n个数的范围 li 和 ri。从每个范围中各选择出一个数,使得n个数的总和不大于m,且公共gcd值为1。求方案数。 题解: 从1到m,dp出每个数作为gcd值且总和不大于m的情况。 枚举当前的gcd值为d,那么最多有m/d份这样的值。 f[i][j]代表第i个范围使用d的数量不大于j时的 阅读全文
摘要:
题意: 给出n行,109列的01矩阵,矩阵中的1是由m段连续的横向区间构成。问至少删除多少行,使得剩下的任意两行之间至少有同一列都为1;并输出删除方案。 题解: 假定某两行有同一列是1,那么称这两行相连。 即使有109列,但是成段的1也只有m段而已。 总体是dp的思想:从上往下扫每一行,当前行的答案 阅读全文
摘要:
题意: 给出n个点,m条边的无向图。对于图中的每个点存在当前点权vi和目标点权ti。每次操作可以将同一条边相连的两个点的当前点权同时增加或减少任意值,可以操作任意次。问是否能将所有点的当前点权变成目标点权。 题解: 设改变点权为目标点权减去当前点权。偶数距离的点可以共享改变点权,奇数距离的点可以同时 阅读全文
摘要:
题意: n*m的矩阵,每个位置都有一个植物。每个植物都有一个价值(可以为负),以及一些它可以攻击的位置。从每行的最右面开始放置僵尸,僵尸从右往左行动,当僵尸在植物攻击范围内时会立刻死亡。僵尸每到一个位置可以获得该位置植物的价值。僵尸可以无限放置,求最大的价值和。 题解: 这种模型好像叫做最大权闭合子 阅读全文
摘要:
A.P2468 [SDOI2010]粟粟的书架 题意: 给定一个R*C的矩阵。M次询问,每次给出一个子矩阵和一个数h。要求在子矩阵找出最少的数,使得这些数的和不小于h。求最少的数的个数,不存在则输出"Poor QLW"。 题解: 观察一下这道题的数据范围: 对于10%的数据,满足R, C≤10; 对 阅读全文
摘要:
题意: 给n个字符串,求出最长的子串。使得子串在每个字符串中不重叠地至少出现2次。输出子串长度。 题解: 用后缀数组求出height数组,之后二分答案。check时对height数组进行分组,并维护每个字符串的最前和最后位置。 #include <bits/stdc++.h> using names 阅读全文
摘要:
题意: 给出一棵n个点的树,每条边有边权。对这个树加边变成一个完全图。新加的边的权值为边上两点在树上的距离。求完全图上任意两点的最大流之和。 题解: 一共有C(n,2)个点对。假设当前求s到t之间的最大流,也就是最小割。那么割完之后会是2个连通块,且连通块内部是完全图。 因为是最小割,所以被割掉的边 阅读全文
摘要:
题意: 给出n个区间和m个点(点按顺序给出且强制在线)。每个区间只会被第一个他包含的点摧毁。问每个点能摧毁多少个区间以及每个区间是被哪个点摧毁的。 题解: 将n个区间按照左端点排序,然后用vector(储存左端点,右端点,id)初始化线段树。 初始化的方法是:对于线段树的n个叶子节点,即为排好序的n 阅读全文
摘要:
题意: 给出a数组的排列。求出字典序第k小的b数组的排列,满足1<=bi<=n,bi<bi+1,a[b[i]]<a[b[i+1]],m>0。 题解: 用树状数组倒着求出以每个数为首的递增子序列个数。若总的个数之和小于k则输出-1。 总的个数可能非常大而k<=1e18。所以要判下上界。 最后从1~n扫 阅读全文
摘要:
A.gpa(01分数规划) 题意: 有n门科目。第i门科目的学分为Si,分数为Ci。根据学校的规定,最终的得分为 。求删掉k门科目后的最大得分。 题解: 二分答案,假设当前二分的答案为P,排序求出Si*(Ci-P)值前n-k大的科目判断可行性。 #include <bits/stdc++.h> us 阅读全文