dp
文章平均质量分 88
jinglinxiao
这个作者很懒,什么都没留下…
展开
-
Weekly Training Farm 23
比赛链接:Weekly Training Farm 23A:优先队列乱搞:#includeusing namespace std;typedef long long ll;struct cmp{ bool operator () (const ll a,const ll b) { return a>b; }};int main(){ int n; while(c原创 2017-02-04 16:21:50 · 311 阅读 · 0 评论 -
Weekly Training Farm 22 - B - ACM-ICPC Contest (背包)
题目链接:Weekly Training Farm 22 - B - ACM-ICPC Contest可以看成背包问题,每道题看成一个物品。对于相同的问题组,当按完成时间升序做题时,罚时最小。所以先对所有问题排一下序。然后就是普通的0-1背包。不过要重定义一下max函数,当做题数最多,罚时最小时,是所要求的最值。然后dp就行了。#includeusing namespac原创 2017-02-04 21:08:32 · 254 阅读 · 0 评论 -
Codeforces Round #396 (Div. 2)
比赛链接:Codeforces Round #396 (Div. 2)A:找最长不公共连续子序列。显然若s!=t,输出s和t最大长度,否则输出-1.#includeusing namespace std;typedef long long ll;int main(){ string s,t; while(cin>>s>>t) { if(s.length()>t.len原创 2017-02-09 20:24:03 · 104 阅读 · 0 评论 -
USACO-Longest Prefix(dp+Trie)
题目链接:USACO-Longest Prefix考虑到所有给定串的元素长度<=10,所以可以用dp来搞。dp[i]表示从1~i是否是一个符合条件的前缀。 然后转移就行。 可以用Trie树来加速某个子串是否出现在元素中。/*ID: xdujlx1PROG: prefixLANG: C++*/#include<bits/stdc++.h>using namespace std;boo原创 2017-03-08 23:08:14 · 273 阅读 · 0 评论 -
USACO-Cow Pedigrees(dp)
题目链接:USACO-Cow Pedigreesdp[i][j]表示深度为i,点数为j的树的种类,small[i][j]表示深度小于i,点数为j的树的种类。 状态转移方程为dp[i][j]=dp[i-1][1~j]*dp[i-1][j~1]+dp[i-1][1~j]*small[i-1][1~j]+small[i-1][j~1]*dp[i-1][j~1]/*ID: xdujlx1PROG: n原创 2017-03-09 17:51:40 · 239 阅读 · 0 评论 -
UVA-11354-Bond(树上倍增,dp,MST,LCA)
题目链接:UVA-11354-Bond首先,最大边最小的路径称为最小瓶颈路,最小瓶颈路一定是最小生成树上的路径(根据Kruskal)。 因此先处理处最小生成树,然后将最小生成树转化成一棵有根树。 anc[i][j]anc[i][j] 为点 ii 的第 2j2^j 层祖先,如: anc[i][0]=fa[i]anc[i][0]=fa[i] 。 cost[i][j]cost[i][j] 为点 ii原创 2017-03-28 17:32:41 · 388 阅读 · 0 评论 -
北方大学 ACM多校训练 第六场-1007- wmq的队伍(树状数组+dp)
题目链接:wmq的队伍dp[i][j] 表示第i个人且他是逆序序列的第j个时的方案数。 dp[i][j]=∑i−1k=1dp[k][j−1]dp[i][j]=\sum_{k=1}^{i-1}dp[k][j-1] 可以用树状数组来维护 ∑ki=1dp[i][j]\sum_{i=1}^{k}dp[i][j]#include<bits/stdc++.h>using namespace std;ty原创 2017-04-09 21:07:38 · 963 阅读 · 0 评论 -
XDOJ-1028-数字工程(dp)
题目链接:XDOJ-1028-数字工程先把素数筛出来,然后从1往后面dp就行了。。#include<bits/stdc++.h>using namespace std;const int maxn=1e6+7;bool vis[maxn];int dp[maxn],prime[maxn];int main(){ int m=0; for(int i=2;i<maxn;i+原创 2017-04-12 22:19:24 · 637 阅读 · 0 评论 -
LightOJ1030- Discovering Gold(期望dp)
题目链接:LightOJ- Discovering Gold任何方案都是从1开始在n结束,dp[i]初始化为i点处的金子数,因为从i点往后面min(6,n−i)min(6,n-i) 个点的行走的概率是相等的,因此 dp[i]=∑min(6,n−i)j=1dp[i+j]min(6,n−i)dp[i]=\sum_{j=1}^{min(6,n-i)}\frac{dp[i+j]}{min(6,n-i)} 。原创 2017-04-19 21:00:43 · 411 阅读 · 0 评论 -
LightOJ-1038-Race to 1 Again(概率dp)
题目链接:LightOJ-1038-Race to 1 Again设 dp[i]dp[i] 为从 ii 到 11 的期望。 因为从 nn 转移到它的所有因子的概率相等,设numnum 为i的因子个数,因此有: dp[i]=1+∑j|iidp[j]numdp[i]=1+\sum_{j|i}^i\frac{dp[j]}{num} 化简得:dp[i]=∑i−1j|idp[j]+numnum−1dp[原创 2017-04-19 21:49:41 · 371 阅读 · 0 评论 -
XDOJ-1113-Too Light(dp)
题目链接:XDOJ-1113-Too Light设 dp[i][j]dp[i][j] 为以 a[i]a[i] 结束的子串中,模 kk 等于 jj 的子串数。 状态转移方程为 dp[i][(j∗10+a[i])%k]+=dp[i][j]dp[i][(j*10+a[i])\%k]+=dp[i][j] 。 初始化 dp[i][0]=1dp[i][0]=1 。#include<bits/stdc++.h原创 2017-04-20 22:51:49 · 337 阅读 · 0 评论 -
Codeforces-797E-Array Queries(dp)
题目链接:Codeforces-797E-Array Queries对于 k>n√k>\sqrt{n} 的询问,直接暴力来算,复杂度为 O(n√)O(\sqrt{n}) 对于 k≤n√k\leq \sqrt{n}的询问,O(n1.5)O(n^{1.5})预处理出答案dp[p][k]dp[p][k]。#include<bits/stdc++.h>using namespace std;const原创 2017-04-21 20:46:46 · 449 阅读 · 0 评论 -
长安大学校赛-2017
比赛链接:长安大学校赛-2017A:水#include<bits/stdc++.h>using namespace std;int a[10]={1,0,0,0,0,0,1,0,2,1};int main(){ int x,T; scanf("%d",&T); while(T--) { scanf("%d",&x); if(x=原创 2017-04-25 01:01:10 · 727 阅读 · 0 评论 -
最长回文子串 - Manacher算法
测试:HDU-3068 讲解:ManacherManacher算法可以在 O(n)O(n) 的时间内解决最长回文子串的问题。 思想还是比较简单的,难在复杂度的证明上,似乎也找不到比较好的证明。 不过根据随机样例测试发现for内的while循环执行次数在 n 左右。#include<bits/stdc++.h>using namespace std;const int N=110007;i原创 2017-05-29 21:14:05 · 244 阅读 · 0 评论