hdu6078[优化递推过程] 2017多校4】的更多相关文章

这道题一眼看过去好像和最长公共子序列有点像. 一开始只想到暴力的推法, 令dp[i][j][k]表示 a[i]=b[j](即以ai,bj为结尾的波浪序列的方案数), 且最终状态为k(0,1分别代表下降与上升)的方案数. 所以我们可能需要优化一下,用一个sum[i][j][k]表示枚举到ai时,能构成以bj为结尾且末状态为k的方案和,可以减少对 j 这一维的枚举. 比如我们在枚举ai+1时,在遍历b中元素时,如果遇到比ai+1大的,那么就加上sum[i][j][1],若遇到比ai+1小的,就加上s…
/*hdu6061[NTT推公式] 2017多校3*/ #include <bits/stdc++.h> using namespace std; typedef long long LL; ; ; int n, m, temp; LL a; LL inv[]; LL Finv[]; LL F[]; LL A[], B[], C[]; LL quickPow(LL x, LL n, LL MOD) { LL ans = ; ) { ) ans = (ans * x) % MOD; x = (x…
题目大意:用k种字符构建两个长度为n的字符串(每种字符有无限多个),要求对应位置字符相同的连续子串最长长度为m,问方法数. 其中k,n,m是输入,n(1<=n<=1000000000), m(1<=m<=10), k(1<=k<=26). 对题目解释更详细点儿,如下两串 123456 223466 这个的“对应位置字符相同的连续子串最长长度”是3,是字符串“234”. 解题思路,这题一看就是DP或者组合数学,但是不会组合数学,只能DP了dp[i][j]表示前i个字符,最…
BZOJ4547 Hdu5171 小奇的集合 Description 有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大值.(数据保证这个值为非负数) Input 第一行有两个整数n,k表示初始元素数量和操作数,第二行包含n个整数表示初始时可重集的元素. 对于100%的数据,有 n<=105,k<=109,|ai|<=10^5 Output 输出一个整数,表示和的最大值.答案对10000007取模. Sample Input…
POJ1742 http://poj.org/problem?id=1742 题意 有n种面额的硬币,面额个数分别为Ai.Ci,求最多能搭配出几种不超过m的金额? 思路 据说这是传说中的男人8题呢,对时间和空间复杂度要求都挺高的. 朴素DP三重循环比较容易想到,但显而易见会TLE. 这里由于dp数组记录的是一个bool值(是否能搭配出某金额),记录的信息较少,因而存在浪费.优化思路是dp[i][j]记录用前i种数加和得到j时第i种数最多能剩余多少个(不能加和得到的情况下为-1).但二维dp数组的…
题目大意: F[0]=0 F[1]=1 F[n+2]=F[n+1]+F[n] 求F[n] mod 104. F[n+2] F[n+1] = 1 1 1 0 * F[n+1] F[n] 记这个矩阵为A,则有: F[n+1] F[n] = An * F[1] F[0] = An * 1 0 然后可以快速幂 #include<cstdio> #include<vector> using namespace std; typedef vector<int> vec; typed…
数字三角形(POJ1163)          在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大.路径上的每一步都只能往左下或 右下走.只需要求出这个最大和即可,不必给出具体路径. 三角形的行数大于1小于等于100,数字为 0 - 99 输入格式: 5      //表示三角形的行数    接下来输入三角形 7 3   8 8   1   0 2   7   4   4 4   5   2   6   5 对于空间优化后的具体递推过程如下: 接下里的步骤就按上图的过…
题目链接: [GXOI/GZOI2019]逼死强迫症 设$f[i][j]$表示前$i$列有$j$个$1*1$的格子的方案数,那么可以列出递推式子: $f[i][0]=f[i-1][0]+f[i-2][0]$ $f[i][1]=2*f[i-1][0]+f[i-1][1]$ $f]i][2]=f[i-1][2]+f[i-2][2]+f[i-2][1]$ 通过递推式子求出一个$6*6$的矩阵然后用矩阵乘法优化递推即可. #include<set> #include<map> #inclu…
Problem UVA1646-Edge Case Time Limit: 3000 mSec Problem Description Input For each test case, you get a single line containing one positive integer: n, with 3 ≤ n ≤ 10000.  Output For each test case, a row containing the number of matchings in Cn.  …
题记:在求最大最小值的类似题目中,递推思想的奇妙之处,在于递推过程也就是比较求值的过程,从而做到一次遍历得到结果. LeetCode 上面的这三道题最能展现递推思想的美丽之处了. 题1 Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of a given stock on day i. If you were only permitted to complet…