可以大胆猜想的一点是,只要有不少于一个长度为k的颜色相同子串,方案就是合法的. 直接算有点麻烦,考虑减去不合法的方案. 一个正(xue)常(sha)的思路是枚举序列被分成的段数,问题变为用一些1~k-1的数组成n的方案数,这显然是可以容斥的.但好像对每一种都进行容斥就不太好办了. 暴力二维dp是很容易想到的.考虑去掉一维的暴力,设f[i]为前i位不合法染色方案数,枚举这一段的长度转移.这显然是可以前缀和的. #include<iostream> #include<cstdio> #…
BZOJ5188 [Usaco2018 Jan]MooTube 突然发现BZOJ没有题目,放题面. 题意翻译 题面描述 在业余时间,Farmer John创建了一个新的视频共享服务,他将其命名为MooTube.在MooTube上,Farmer John的奶牛可以录制,分享和发现许多有趣的视频.他的奶牛已经发布了 N个视频 ( $1 \leq N \leq 100,000 \(),为了方便将其编号为\) 1 \ldots N $.然而,FJ无法弄清楚如何帮助他的奶牛找到他们可能喜欢的新视频. FJ…
Description: Bessie想拿\(M\) 种颜色的长为\(K\) 的图章涂一个长为\(N\) 的迷之画布.假设他选择涂一段区间,则这段区间长度必须为\(K\) ,且涂完后该区间颜色全变成图章颜色.他可以随便涂,但是最后必须把画布画满.问能有多少种最终状态,\(N\leq 10^6,M\leq 10^6,K\leq 10^6\) Solution: 好题 告诉我了思维僵化是多么可怕 想了各种排列组合 最后看到正解直接傻逼 正着做非常不可做 考虑补集转化,求任意一段相同颜色长度都小于k的…
可以发现,只要存在连续k个相同的,这个情况就一定是合法情况 然而这个不太好算,我们算不存在k个相同的,然后用$m^n$把它减掉 设f[i]为前i个,没有连续k个的 显然$f[i]=m^i ,i<K$ 然后我们现在想把f[i]转移过来,只要取f[i-k+1]..f[i-1]的所有情况,然后在每个的后面都涂上与这种情况的最后一个颜色不相同的颜色就可以了.容(bu)易(hui)证明这样做是不重不漏的 所以$f[i]=(M-1)\sum_{j=i-K+1}^{i-1}f[j]$ #include<bi…
传送门 其实本来想做组合数学的2333. 谁知道是道dpdpdp. 唉只能顺手做了 还是用真难则反的思想. 这题我们倒着考虑,只需要求出不合法方案数就行了. 这个显然是随便dpdpdp的. f[i]f[i]f[i]表示到第iii个格子不合法的方案数. 那么有两种情况. i<ki<ki<k,则无论怎么当前格子染都不合法,f[i]=f[i−1]∗mf[i]=f[i-1]*mf[i]=f[i−1]∗m i≥ki\geq ki≥k,则从当前的格子向左染最多染到第i−k+1i-k+1i−k+1个格…
BZOJ又不给题面... Luogu的翻译看不下去... 题意简述 有一个$n$个节点的树,边有权值,定义两个节点之间的距离为两点之间的路径上的最小边权 给你$Q$个询问,问你与点$v$的距离超过$k$的点有多少个 $n,Q<=100000$ 题解 很妙的做法. 并查集+离线 显然可以把询问离线,按K值排序 处理距离的话可以使用并查集,并不需要带权,只需要把边也按权值排序,用并查集维护. 具体做法:对每个点维护一个$siz$数组表示与它联通的节点数目,用类似双指针的方法把符合规则的边的两端点并起…
BZOJ没有题面QAQ,题目链接 洛谷有:题目链接 这题首先要读懂题..(洛谷的翻译有点迷 就是指定根节点,然后可以在叶子结点放个人,然后奶牛在根,问最少要在叶子结点放多少人才能让奶牛走不到叶子结点(奶牛和人相遇就死掉) 首先对于一个叶子结点和另外一个叶子结点,只需要在其中一个节点放人的条件:当且仅当$2*dep[lca(u,v)]>=dep[u]$($u,v$是两个节点) 所以把所以叶子结点扔进一个set里面,每次取出深度最小的 然后遍历一下剩下的叶子结点,对于满足上面那个条件的叶子结点全删了…
题面 Bzoj 洛谷 题解 最暴力的方法是直接判两个点之间的路径最小值是否\(\geq k\),用\(Dijkstra\)可以做到该算法最快效率,但是空间复杂度始终是\(O(n^2)\)的,会\(MLE\),其实仔细观察一下,会发现对于一个满足某个\(k\)的路径\(dis\),它一定会满足\(\forall k'\leq k\),同时,对于任意一条长度大于\(|dis|\)的路径,它也满足又满足这些\(k\),甚至更多的\(k'\),于是我们从这个性质入手. 具体来说,就是将询问离线化,按照\…
题目链接 luogu bzoj \(Describe\) 有一个\(n\)个节点的树,边有权值,定义两个节点之间的距离为两点之间的路径上的最小边权 给你\(Q\)个询问,问你与点\(v\)的距离大于等于\(k\)的点有多少个 \(Solution\) 这道题主要用并查集搞一下就好了啊. 离线的做. 首先将边按照权值排序,将询问的按照k排序 然后把权值大于等于\(k\)的放入并查集中,维护一个\(siz\)即节点的个数. \(End\) \(Code\) #include<bits/stdc++.…
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; typedef long long LL; ; int read() { ,f=;char ch=getchar(); ;ch=getchar();} +ch-';ch=getch…
题目大意:全然背包.假设最顶端的物品重量≥k,那么以下的全部物品的重量变为原来的45 考虑一些物品装进背包,显然我要把全部重量大于≥k的物品中重量最小的那个放在最顶端.才干保证总重量最小 那么我们给物品排个序,第一键值为重量是否≥k(≥k的放在前面),第二键值为重量(从小到大) 然后依次增加背包.令fi表示没有重量≥k的物品放在最顶端时重量为i的最大价值.gi表示有重量≥k的物品放在最顶端是重量为i的最大价值.DP就可以 时间复杂度O(nT) #include <cstdio> #includ…
P4187 [USACO18JAN]Stamp Painting 样例 input3 2 2output6 input6 10 5output190 sol:首先可以发现,对于合法的序列,只要有一串至少连续K个相同的就可以了,其他没有限制 这当然是可以dp辣 dp[i][j]表示前i位没有,当前有j个连续相同,前面没有出现连续K个相同 统计答案的时候就是∑i={K,n} dp[i][K]*Ksm(m,n-i) 转移挺容易的 dp[1][1]=m dp[i][1]=(m-1)*∑j={1,K-1}…
[BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地说,他们有P (1 <= P <= 300) 道题目要做. 他们还离开了农场并且象普通人一样找到了工作. 他们的月薪是M (1 <= M <= 1000) 元. 他们的题目是一流的难题,所以他们得找帮手.帮手们不是免费的,但是他们能保证在一个月内作出任何题目.每做一道题需要两比付款,…
题意:给定一个数N,表示有N个位置,要么放置0,要么放置1,问至少存在一个连续的M个1的放置方式有多少? 分析:正面求解可能还要考虑到重复计算带来的影响,该题适应反面求解.设dp[i][j]表示到前 i 为后导 1 个数为 j 的方案数,于是有动态规划方程: dp[i][0] = sum{ dp[i-1][0... min(i-1, M) ] };dp[i][j] = dp[i-1][j-1]  其中 j != 1 单单根据这个方程时间度为O(N*M),还是不足以在有限的时间内解出该问题.通过观…
183. Painting the balls time limit per test: 0.25 sec.memory limit per test: 4096 KB input: standard inputoutput: standard output Petya puts the N white balls in a line and now he wants to paint some of them in black, so that at least two black balls…
预处理普通动态规划:庆祝1A三连 Description 为了研究农场的气候,Betsy帮助农夫John做了N(1 <= N <= 100)次气压测量并按顺序记录了结果M_1...M_N(1 <= M_i <= 1,000,000). Betsy想找出一部分测量结果来总结整天的气压分布. 她想用K(1 <= K <= N)个数s_j (1 <= s_1 < s_2 < ... < s_K <= N)来概括所有测量结果. 她想限制如下的误差:…
Running贝茜的晨练计划 bzoj-1613 Usaco-2008 Jan 题目大意:题目链接(U组题题意真的是没法概括qwq....). 注释:略. 想法:一眼dp题. 状态:dp[i][j]表示到达了i时,疲劳值为j的最大运动量. 转移yy,输出dp[n][0]即可. 最后,附上丑陋的代码... ... #include <iostream> #include <cstdio> #include <cstring> #include <algorithm&…
题意:给n个白球,选其中一些涂为黑色,且给了涂第i个球的花费为ci,要求每m个连续的球中至少有两个黑球,问最小花费是多少? 容易想到一个方程dp[i][j]=min{dp[k][i]}+c[j] dp[i][j]表示最后上色的两个球分别是第i和第j个球(i<j)时的最优解. 我们从条件每m个连续的球中至少有两个黑球可以得出k的范围j-m<=k<i 如果我们直接按上面这个方程去做的话时间复杂度是O(n*m*m). #include <iostream> #include <…
#include<cstdio> #include<algorithm> using namespace std; #define N 10001 int n,m,a[N],f[N][501]; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) scanf("%d",&a[i]); for(int i=1;i<=n;++i) { f[i][0]=…
动态规划属于技巧性比较强的题目,如果看到过原题的话,对解题很有帮助 55. Jump Game Given an array of non-negative integers, you are initially positioned at the first index of the array. Each element in the array represents your maximum jump length at that position. Determine if you ar…
此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276,1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740(博弈),1742, 1887, 1926(马尔科夫矩阵,求平衡), 1936, 1952, 1953, 1958, 1959, 1962, 1975,…
背包型动态规划 1.Wikioi 1047 邮票面值设计 题目描写叙述 Description 给定一个信封,最多仅仅同意粘贴N张邮票,计算在给定K(N+K≤40)种邮票的情况下(假定全部的邮票数量都足够),怎样设计邮票的面值.能得到最大值MAX.使在1-MAX之间的每个邮资值都能得到. 比如.N=3,K=2,假设面值分别为1分.4分.则在1分-6分之间的每个邮资值都能得到(当然还有8分.9分和12分):假设面值分别为1分.3分,则在1分-7分之间的每个邮资值都能得到.能够验证当N=3.K=2时…
[1]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740(博弈), 1742, 1887,1926(马尔科夫矩阵,求平衡), 1936, 1952, 1953, 1958, 1959, 1962, 1975, 1989, 2018, 2029,…
]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740(博弈), 1742, 1887, 1926(马尔科夫矩阵,求平 衡), 1936,1952, 1953, 1958, 1959, 1962, 1975, 1989, 2018, 2029,2…
此文转载别人,希望自己可以做完这些题目. 1.POJ动态规划题目列表 easy:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276,1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740(博弈),1742, 1887, 1926(马尔科夫矩阵,求平衡), 1936, 1952, 1953, 1958, 1959, 1962, 1975…
C. Painting Fence time limit per test 1 second memory limit per test 512 megabytes input standard input output standard output Bizon the Champion isn't just attentive, he also is very hardworking. Bizon the Champion decided to paint his old fence his…
[luogu P2205] [USACO13JAN]画栅栏Painting the Fence 题目描述 Farmer John has devised a brilliant method to paint the long fence next to his barn (think of the fence as a one-dimensional number line). He simply attaches a paint brush to his favorite cow Bessi…
#!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial In this example, we draw text in Russian azbuka. author: Jan Bodnar website: zetcode.com last edited: September 2011 """ import sys from PyQt4 import QtGui,…
如题,贪心算法隶属于提高算法效率的方法,也常与动态规划的思路相挂钩或一同出现.下面介绍几个经典贪心问题.(参考自刘汝佳著<算法竞赛入门经典>).P.S.下文皆是我一个字一个字敲出来的,绝对"童叟无欺",哈哈.(.⌒∇⌒) 耗费了我的很多时间,所以--希望对大家有帮助啊~ (=^‸^=) 一.背包相关问题 1.最优装载问题:给出N个物体,有一定重量.请选择尽量多的物体,使总重量不超过C.解法:只关心数量多,便把重量从小到大排序,依次选,直到装不下. 2.部分背包问题:给出N个…
上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的增强学习). 那么如何求解最优策略呢?基本的解法有三种: 动态规划法(dynamic programming methods) 蒙特卡罗方法(Monte Carlo methods) 时间差分法(temporal difference). 动态规划法是其中最基本的算法,也是理解后续算法的基础,因此本…