计数DP
Winterfell30
这个作者很懒,什么都没留下…
展开
-
URAL 1091 Tmutarakan Exams (DP或容斥)
题意给出一个K和S,求从小于S的数里取出一个K元组的gcd大于1的K元组的数量。思路可以dp做,dp的话是经典的计数问题,而且因为数据比较小写起来也比较简单,dp[i][j][k]表示枚举到i时取了j个数此时的gcd为k的个数,则dp[i+1][j+1][gcd(k,i+1)]+=dp[i][j][k],dp[i+1][j][k]+=dp[i][j][k]。 或者容斥,因为所有合数都能用素数来表示原创 2016-05-03 20:40:01 · 445 阅读 · 0 评论 -
HDOJ 5807 Keep In Touch
A - Maximum Increase求最长连续子串长度int a[maxn];int main() { //freopen("H:\\in.txt","r",stdin); //freopen("H:\\out.txt","w",stdout); int n; scanf("%d", &n); int ans = 0, mmax = 0, now = 1;原创 2016-08-01 17:17:00 · 472 阅读 · 0 评论 -
HDOJ 5763 Another Meaning
题意给两个字符串a和b,b有两义性,求a一共有多少种可能的意思。思路首先KMP预处理出所有b是a子串的末尾位置,然后基础dp就可以了。 如果i位置是子串末尾则dp[i] = dp[i-1] + dp[i-lenb] + 1否则直接转移。代码#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm>原创 2016-10-26 00:30:49 · 380 阅读 · 0 评论