
dp
hrbust_wgq
当我们理解了一个东西的时候,所应该做的,是将这个东西放下去,好让更多的人明白和掌握;而不是举起来,以一种高姿态故作高深。这不是科学文化发展和传播的正道。有时候,所谓的“一言以蔽之”,不经意间,就“蔽”掉了求知者的热情和渴望,同时也就“蔽”掉了科学文化的健康传承。
把问题说清楚,尽可能让更多的人明白,是博客的宗旨。直达本质,直达底层,去术语化,用最通俗、最平易的语言和讲解方式说清“到底是什么”、“原来是这样”,是要努力的方向。
展开
-
codeforces 432D 【kmp+dp】||【后缀数组】
codeforces 432D 【kmp+dp】||【后缀数组】Description:给出一个字符串,求有多少种长度的前缀和后缀相等,并且得到的这个前缀在原字符串中出现的次数。 solution1:kmp+dp 求前缀出现的次数,原来就写过: https://blog.youkuaiyun.com/qq_43653111/article/details/103354633 现在找一下前缀后缀相等:很容易发现n,nxt[n]就是一个 再找找nxt[nxt[n]]也是,gg了 scanf("%s原创 2020-06-10 16:37:19 · 239 阅读 · 0 评论 -
CodeForces - 713C(经典DP)
CodeForces - 713C(经典DP)题意:给出一个长度为n的数列(n<=3000),每次操作可以把其中一个数增大1或者减小1,求最少操作次数使得数列严格单调递增。思路:1.首先如果是变成一个非递减的序列,该怎么做?我们很明显可以发现:最后这个非递减的序列一定只是原来序列排序之后的结果。假设dp[i][j]表示当前枚举到第i个数,让它变成第j大的数需要的最小花费,那么转移方程很显然就是:dp[i][j]=min(dp[i-1][k]+abs(a[i]-b[j]),dp[i][j]);原创 2020-05-21 15:55:44 · 404 阅读 · 1 评论 -
树上背包问题
树上背包问题引例1引例1金明的预算方案题意:01背包问题,某些物品有依赖关系,但是一个物品只能依赖一个物品,最多可被两个物品依赖,问你最大价值是多少?思路:很明显就是01背包的思路,分类讨论就好了/*▄███████▀▀▀▀▀▀███████▄░▐████▀▒▒▒▒▒▒▒▒▒▒▀██████▄░███▀▒▒▒ACCEPTED▒▒▒▒▀█████░▐██▒▒▒▒▒▒▒▒▒▒▒▒▒...原创 2020-05-06 11:31:58 · 399 阅读 · 0 评论 -
HDU 3336【前缀出现次数】dp+kmp
HDU 3336【前缀出现次数】dp+kmp 题意:求出字符串前缀出现的总次数,答案对1e4+7取模; 思路:我们先考虑kmp匹配前缀与自身,可惜是O(n*n)的复杂度,那么我们该怎样匹配呢?对于这样一个串, 我们可以很容易发现这样一件事cnt[s1]=cnt[s2]=cnt[s3]+1;我们初始化cnt[i]=1;然后从后往前累加cnt[nxt[i]]+=cnt[i],每出现一次长串,就...原创 2019-12-02 19:18:46 · 343 阅读 · 0 评论 -
HDU 4251 【线段树+dp】
HDU 4251 【线段树+dp】传送门题意: 给你一个长度为n的序列,找出最长上升子序列而且相邻元素之间的下标差值大于d,输出最长的.思路: 一看是个LIS,但是这里要求下标大于d,改写dp之后也是O(n^2)。1.if(a[i]>a[j]&&i-j>d) dp[i]=max(dp[i],dp[j]+1);2.从dp方程可以看出来,我们如果要减少复杂度,...原创 2019-09-17 21:51:25 · 182 阅读 · 0 评论