
dp
取竹
Hai capito?
展开
-
1079[bzoj]: [SCOI2008]着色方案
打这道题的时候总感觉自己在打表。。。。无话可说用F数组表示能涂1,2,3,4,5个的油漆各有几个,pre记录前一个选的。如果两个油漆可涂次数一样,那么他们可以看做同一个性质的,记录在一起。然后转移,具体看代码。#include #define ll long longusing namespace std;const int p=1000000007;int k,x原创 2017-05-02 20:47:29 · 189 阅读 · 0 评论 -
51nod 1350 斐波那契表示
1350 斐波那契表示斐波那契数列定义为 f[0]=f[1]=1, f[i]=f[i-1]+f[i-2] (i>=2) 从f[i]开始的连续f[i-1]项 的最短表示F[t] 是有规律的。 其前f[i-2]项和 从f[i-1]开始的连续f[i-2]项相等,其后f[i-3]项为 从f[i-2]开始的连续> f[i-3]项 每项+1比如,当i=6时,13开始的连续8项,即F[13],F[14],原创 2017-12-05 21:00:44 · 235 阅读 · 0 评论 -
51nod 1020 逆序排列
1020 逆序排列离线处理,二维dp[i][j]dp[i][j]表示前i个有k个逆序对的数量。f(n,k)=f(n,k−1)+f(n−1,k)−f(n−1,k−n)f(n,k)=f(n,k-1)+f(n-1,k)-f(n-1,k-n)用滚动数组储存#include <algorithm> #include <cstring> #include <cstdio> using namespac原创 2017-12-05 20:49:22 · 245 阅读 · 0 评论 -
[2017百度之星程序设计大赛 - 复赛]E - hdu6148
裸的数位DP,只需要判断之前是否已经改变过递增减就行了。直接上模板。#include#include#include#include#define ll long longusing namespace std;const int N=110,P=1000000007;ll f[N][2][10],a[N],n;ll dfs(ll pos,ll st,ll lim,ll p原创 2017-09-11 19:56:15 · 237 阅读 · 0 评论 -
[2017百度之星程序设计大赛- 复赛] C - hdu6146
我们设 Bn 代表从某个角出发,然后走遍所有格子回到同一列的方案数目。Bn=2×Bn−1=2n−1同样,我们设 An 代表从某个角出发,然后走遍所有格子的方案数。则 An=Bn+2×An−1+4×An−2其中 Bn 代表回到了当前列的方案数, An−1 代表先填满当前列然后走到相邻的列处理同样的一个子问题, An−2 代表通过对角线方式先走完当前列与相邻列的格子,然后剩下的 n原创 2017-08-30 21:39:02 · 355 阅读 · 0 评论 -
bzoj[1855] [Scoi2010]股票交易 ,[2826]Minecraft的世界末日
这两道题本质上是一样的。令f[i][j]表示第i天持有j个股票(污染物),那么答案一定是f[i][0]中的一个。dp转移式:f[i][j]=max(f[i-t-1][k]-a[i]*k+a[i]*j)用单调队列维护f[i-t-1][k],保证队头最大。队列中记录k。当队头的k加上当天的最大买入值仍小于j时弹出队头队尾的值若小于当前的值则弹出队尾。#include原创 2017-07-02 13:04:27 · 436 阅读 · 0 评论 -
[bzoj]1026: [SCOI2009]windy数
看题目很容易想到数位dp,具体做法看这位的:http://blog.youkuaiyun.com/zz_ylolita/article/details/50754618讲的还是很详细的。#include #include #include #define ll long longusing namespace std;ll a,b;int len,d[12];ll dp[12][12];原创 2017-07-04 18:02:07 · 182 阅读 · 0 评论 -
[bzoj]1040: [ZJOI2008]骑士
根据关系建立一个无向图,每次找到一个环。对于环上的一条边e,取两边的点u,v,各做一次树形dp。对于g[x]表示不取x时最大值,对于f[x]表示取x时最大值。在做dp时要将边e断开不走。取g[u]与f[u]的最大值加入答案中。#include #include #define ll long longusing namespace std;const int N=10000原创 2017-06-12 20:04:40 · 312 阅读 · 0 评论 -
[bzoj]1046: [HAOI2007]上升序列
题目要求我们求出以每个数开头的最长上升序列,那么我们就倒着做最长下降序列。best[i]数组记录以i开头的最长上升序列的最大值。处理时记得是位置的字典序。#include using namespace std;const int N=100005;int n,cnt,m;int a[N],f[N],best[N];inline int find(int x){ int原创 2017-06-29 21:36:32 · 234 阅读 · 0 评论 -
[bzoj] 4720: [Noip2016]换教室
f数组表示前i个换了j次,此次是否成功的期望值。先floyd求出所有点间的距离后,进行dp即可。#include #include using namespace std;const int N=2005;const double eps=1e-9;int n,m,v,e,a,b;int c[N],d[N];double ki[N],w,map[305][305],ans;原创 2017-05-17 21:30:03 · 259 阅读 · 0 评论 -
[bzoj]1042: [HAOI2008]硬币购物
神奇的题目,dp+容斥。一开始基本没思路,看了别人的题解后才理解。令f数组为硬币无数量限制时达到s的种类,先预处理完。然后对于每次询问只要加出一个sum后减去重复部分。(容斥)#include #define ll long longusing namespace std;const int N=100005;int c[6],tot;int d[6],s;ll a原创 2017-04-18 20:58:01 · 226 阅读 · 0 评论 -
bzoj 1041 [HAOI2008]圆上的整点
1041: [HAOI2008]圆上的整点http://www.lydsy.com/JudgeOnline/upload/1041.flvhttp://blog.youkuaiyun.com/csyzcyj/article/details/10044629有上述定理,则问题转化为求r^2的 %4余1因子数 和 %4余3因子数。用约数个数定理,去掉偶因子后可以求出两者之和因此,求其中一种即可。从%4余1的因子数下原创 2017-12-05 21:14:04 · 261 阅读 · 0 评论