摘要:
枚举右下角,问题转化成求以(x,y)为右下角的n*n正方形中的极值。 我们可以先把这个n*n正方形拆成n行n列。 用单调队列可以很快求出每一个位置往左n个的极值。 然后存储下来再用单调队列再求一次,合起来就是一个n*n正方形。 感觉很难说清楚,可以配合代码理解。 阅读全文
摘要:
类似田忌赛马问题。 设浙江队的实力值为a数组,对手的实力值为b数组。 先把两数组从小到大排序。 如果a中最小的一个比b中最小的一个大,那就让他们两个打。 如果a中最大的一个比b中最大的一个大,那就让他们两个打。 如果二者都不是就让a中最小的一个和b中最大的一个打,注意判断两者有可能是相等的。 第二问 阅读全文
摘要:
由于m只会是1或者2,那么就干脆分类讨论,可以开两个namespace实现。 当m为1时。 设dp[i][j]表示前i个数中选了j个矩阵的最大值。 dp[i][j]=max(dp[i-1][j],dp[k][j-1]+sum[i]-sum[k])(0<=k<i)。 当m为2时。 设dp[i][j][ 阅读全文
摘要:
完全背包预处理再容斥。 符合条件的付款方法数=所有付款方法数-不符合的方法数。 所有付款方法数可以用完全背包求出。 根据容斥原理,不符合的方法数等于第一种硬币不符合的方案数+第二种硬币不符合的方案数+……-第一种和第二种硬币都不符合的方案数-第一种和第三种硬币都不符合的方案数-……+第一种和第二种和 阅读全文
摘要:
没有什么是一个BFS或一个DFS解决不了的;如果有,那就两个一起。 裸的最小割,dinic算法水过。 注意时间比较紧,要加一些优化,比如到不了T的边就把它的dis赋值为0。 阅读全文
摘要:
题目其实就是求N范围内约数最多的数中最小的数。 若x=p1^k1*p2^k2……那么约数的个数就是(k1+1)*(k2+1)……的结果。 假如一个数分解质因数之后是一堆质数的一次方,那么我们肯定选素数小的才有可能是反素数。 所以别的素数就不用管了,前面十个素数的乘积就已经大于2*10^9了。 于是就 阅读全文