动态规划
basasuya
这个作者很懒,什么都没留下…
展开
-
CF370 D Memory and Scores
dp题 并运用了前缀和 我看题目提示中有fft 我想了下感觉复杂度不过关还是未解#include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 4e5+5; const int MOD = 1e9+7; const int ze = 2e5; ll dp[2][MAXN]; ll sum[MAX原创 2016-09-13 18:04:31 · 443 阅读 · 0 评论 -
Codeforces Round #432 Div. 1 C. Arpa and a game with Mojtaba
首先容易想到,每种素数是独立的,相互sg就行了 对于一种素数来说,按照的朴素的mex没法做。。。 所以题解的简化就是数位化 多个数同时含有的满参数因子pkp^k由于在博弈中一同变化的,让他们等于相当于2k2^k,那么这样就是一个数了之后就是模拟,牛逼的思路#include<iostream> #include<map> #include<iostream> #include<cstring>原创 2017-09-08 19:19:01 · 279 阅读 · 0 评论 -
hihocoder Challenge 29 A.序列的值
我现在就感觉我这人现在真的没有dp的意识 其实真写起来也不难,但是把就是练的少思维跟不上,dp从根本上就是一种状态的提炼和聚集。按照题解的意思来,dp[i][j]dp[i][j]表示二进制第i位的值为j(0,1)的组合有多少,然后滚动数组今天补完之后感觉,除了fft,我懒得抄板子就不补了,其他三题,代码难度都不大。爆零也就算买个教训,希望7.8codem好好打#include<cmath> #in原创 2017-07-03 23:20:39 · 384 阅读 · 0 评论 -
hihocoder Challenge 29 B.快速乘法
这题的题解和我写的有一拼,异常简洁,爆炸。这题思路dp dp[i][j]dp[i][j] 表示的是讨论到第nn位,并比原数的前n位多了 j∗2ij*2^i 显然j只能取0,1,毕竟2进制嘛 之后转移就好了,注意下面两个重要状态 dp[i][1]=dp[i][0]+2dp[i][1] = dp[i][0] + 2 dp[i][0]=dp[i][1]+2dp[i][0] = dp[i][1]原创 2017-07-03 21:11:14 · 282 阅读 · 0 评论 -
CF384 div2 E. Vladik and cards
题意 给你一个1−81-8的排列,求一个满足条件的最长子序列 每种数字的差小于等于11,并且每种数字之内是连续的 解法 首先单纯认为用dpdp肯定不行的 所以应该考虑二分答案(所求长度具有二分性) 再用dp判断是否可行,这个dp很简单就是dp[N][1<<8] dp[N][1<<8] #include<iostream> #include<cstdio> #include<原创 2017-02-25 14:29:48 · 356 阅读 · 0 评论 -
hdu5904 LCIS
这题惩罚我这种经常不管常数的懒人 直接 1e6 TLE 如果1e5对数组枚举过诶其实很想吐槽些伤心事,但是还是不想在博客上吐口水 不管今年比赛结果如何 请享受比赛#include<bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int MAXN = 1e6+5; #define lson l,m,rt<<原创 2016-09-25 00:07:33 · 314 阅读 · 0 评论 -
2016弱校联盟十一专场10.2 Longest Increasing Subsequence
这个dp题很有学问,我也是照着标称写的 还需要学习#include<vector> #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int MAXN = 1e5+5; typedef long long ll; int main(){ int n; while(~s原创 2016-10-05 21:59:56 · 313 阅读 · 0 评论 -
hdu5887 Herbs Gathering
神他妈随便写写就能过… 暴力枚举每个取不取 两个剪纸: 1.当剩下可用的时间小于最少需要用的时间 跳出 2.当剩下的植物按照理想情况(甚至可以取一部分)得到的极限答案比已经求出的答案大 跳出#include<bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int MOD = 1e9+7; typed原创 2016-09-23 00:03:40 · 528 阅读 · 0 评论 -
hdu5860 Death Sequence
这题一开始写的线段数是从中间开始查找 k个 导致是nlogn 每次查找应该都是从头找每次找的个数不同就好了 #include using namespace std; typedef long long ll; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int MAXN = 3e6+5; int N,K,Q; int tree原创 2016-08-20 21:04:01 · 558 阅读 · 1 评论 -
HDU5779 Tower Defence
dp[i][j][k] 已选i个人 选到第j层 第j层有k个人 讨论相邻层 上一层选了l人 那么共有 两层之间的方案数 以及这一层自己的方案数 #include using namespace std; typedef long long ll; const int MOD = 1e9+7; ll Pow[3605]; ll dp[65][65][65]; ll C[65][65]; int原创 2016-08-01 14:52:21 · 401 阅读 · 0 评论 -
玲珑杯#2.5 A-B
这个题解错了网上还没有题解 囧 fif_i = (i%2)? 1 : -1 FnF_n = (n+m−1m−1)\begin{pmatrix} n+m-1 \\ m-1 \end{pmatrix} - ∑ni=0\sum_{i=0}^n ∑m−1j=1\sum_{j=1}^{m-1} (n−i∗(j+1)+m−2 m−2)\begin{pmatrix} n-i*(j+1)+m-2 \原创 2016-09-13 15:06:12 · 295 阅读 · 0 评论 -
Good Bye 2017 D. New Year and Arbitrary Arrangement
看了别人的题解 首先这题是一个dpdp[i][j] i是当前有多少个a j是当前有多少个ab子序列dp[i][j] = dp[i+1][j]*Pa + dp[i][i+j]*Pb; i,j 时加一个a之后会变成i+1, j i,j 时加一个b之后会变成i, i+j除此之外的话对于i+j >= k的情况 其实是一个几何分布来概括,此时 dp[i][j] = i+j + 1/p原创 2017-12-31 21:23:43 · 228 阅读 · 0 评论