hdu_5807_Keep In Touch(分段dp)】的更多相关文章

题目链接:hdu_5807_Keep In Touch 题意: 在Byteland一共有nn个城市,编号依次为11到nn,同时有mm条单向道路连接着这些城市,其中第ii条道路的起点为u_iu​i​​,终点为v_i(1\leq u_i < v_i\leq n)v​i​​(1≤u​i​​<v​i​​≤n). 特工团队一共有33名成员:007,008,以及009,他们将要执行qq次秘密任务. 在每次任务中,三人可能会处于三个不同的城市,他们互相之间通过对讲机保持联络.编号为ii的城市的无线电频为w_…
DAG图. [题意] n(50)个城市m(c(n,2))条单向边(x,y),保证x<y 对于三个点(x,y,z)如果abs(w[x]-w[y])<=K && abs(w[x]-w[y])<=K && abs(w[x]-w[y])<=K则这是一个合法状态. 问你,如果我们从(x,y,z)出发,可以在合法状态中任意行走任意终止,有多少种不同的行走路径数 f[i][j][k] = ∑f[ii][jj][kk],ii,jj,kk分别为i,j,k的直接后继 时…
题意:将n个数分成m段,每段的代价为最大值减最小值的平方,为代价最小是多少n<=10000 ,m<=5000 题解:先拍好序,从小到大,这样绝对是花费最小的,不过怎么样来做呢?一定很容易想到dp 分段dp十分好想吧,f[i][j]表示前i个数,分成j个数的最小值. w[i][j]区间包含性十分好证明, 平行四边不等性,可以很好证明, 对吧,这样很好理解 所以得出f[i][j]满足------>s[i][j-1]<=s[i][j]<=s[i+1][j] 这个得出来就ok了,但是…
题目链接 BZOJ3193 题解 注意\(key\)是小于 第一问,显然按高度降序排序,逐个插入 如果高度各不相同,那么之前插入的都比当前插入的\(i\)大,可插入的位置个数就确定了 由于存在高度相同的情况,将key作为第二关键字升序排序 这样后面插入的就一定能插入前面插入的之后,统计一下之前插入了\(cnt\)个相同高度的,可插入的位置就加上\(cnt\) 第二问 如果高度各不相同,答案同第一问 否则要考虑相同高度带来的影响 分段\(dp\)计算每一段相同高度的贡献 我们默认\(key\)大的…
区间dp. 一种是分段dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]); 一种是这一段可以缩写dp[i][j]=min(dp[i][j],dp[i][l]+2+calc((j-i+1)/(l-i+1))); calc表示计算十进制的位数 边界就是l==r f[l][r]=1 #include<bits/stdc++.h> using namespace std; int read(){ ,f=;char ch=getchar(); ;ch=getchar()…
首先是DP,分段DP(按位数讨论) 然后每一段构造出它对应的矩阵,用矩阵快速幂加速 type matrix=..,..]of int64; var n,m:int64; a,b,c,d:matrix; function min(x,y:int64):int64; begin if x<y then exit(x); exit(y); end; procedure cheng(var a,b:matrix); var i,j,k:longint; begin do do d[i,j]:=; do…
A. Detective Book 题意:一个人读书  给出每一章埋的坑在第几页可以填完 . 一个人一天如果不填完坑他就会一直看 问几天能把这本书看完 思路:模拟一下 取一下过程中最大的坑的页数  如果最大页数等于当前页数 day++即可 #include<bits/stdc++.h> using namespace std; #define FOR(i,f_start,f_end) for(int i=f_start ;i<=f_end;i++) #define MT(x,i) mem…
bzoj1009:kmp想法+递推+矩阵快速幂.很好的想法,考虑用长串去kmp匹配短串,dp[i][j]表示匹配指针分别指在i.j位置时候,前i位母字符串一共有多少种可能性,那么dp[i][j]=Σdp[i-1][k]*p[k][j] p[k][j]就是状态k后加一位数字转移到状态j一种多少种可能(通过自己匹配自己来预处理p),那么可以看做一个矩阵dp[i-1]和p[][]不断相乘,矩阵快速幂即可 bzoj2120:莫对算法.最基础的莫队,O(1)转移的,按照block[l]为第一关键字,r为第…
补题进度:7/11 1001 待填坑 1002 待填坑 1003(set) 题意: 给定长度为n(n<=5e5)的数组(是n的一个排列)和一个整数k(k<=80),f[l,r]定义为区间[l,r]内的第k大的数,求所有区间的f值的和 分析: 倒过来考虑,考虑每个数a[i]对答案有多少贡献 将n个数字从大到小依次插入对应位置,已经插入的当作障碍点(可以用set来维护) 那么对于一个i,可以枚举其左边有x个右边有k-x个去统计答案,因为k<=80,所以是OK的 注意边界情况 时间复杂度O(n…
题目 题意: $ yyf $ 一开始在 $ 1 $ 号节点他要通过一条有 $ n $ 个地雷的道路,每次前进他有 $ p $ 的概率前进一步,有 $ 1-p $ 的概率前进两步,问他不领盒饭的概率. 对于这道题我们可以考虑 $ dp $ ,我们可以设计状态 $ f[i] $ 表示安全通过 $ i $的概率,那么我们可以得到状态转移方程 $ f[i]=p* f[i-1]+(1-p)* f[i-2] $ $ f[x_i]=0 $ 然后我们可以看到 $ x \in [1, 100000000] $如果…
ZR9.8普转提 A,B 打过的CF原题,不管了 C 确认过眼神,是我不会写的DP, 发现这个题目要求的过程类似与一个所有括号都不一样的括号匹配的过程 但是限制条件非常多,有点无从下手的感觉 我们设\(f_{i,j}\)表示当\(i\)出栈前,\(i\)在栈底,\(i\)和他上面的所有物品重量不超过\(j\)时的最大价值 但是这样很难统计贡献,因为最终状态的栈是空的 我们考虑在栈的底部放一个永远不会被弹出的东西 他的参数是\(in:0,out:2\times n+1,w:0.s:w,v:0\)…
说说题吧前两道暴力 a直接枚举每个位置然后枚举所在行和列 b直接枚举所有的x的banana 的数量.计算方式等差数列求和小学生难度.记得long long.int转longlong c记下remove的次数,add直接入栈,remove看栈顶是正确的就出,空栈就出堆顶,不正确就全部入堆ans++ d给每个k和所在行和列的每个点建一条长为1的边,和一条长度为0的回边.求最短路 e据说是分段dp,留坑 sb我依然只写了2道…
Keep In Touch Problem Description   There are n cities numbered with successive integers from 1 to n in Byteland. Also, there are m one-way roads connecting the cities. The starting point of the i-th road is ui while the ending point is vi. There are…
// HDU5807 Keep In Touch DP // 思路:直接暴力是O(n^6).所以要优化一下 // dp[i][j][k][0]:当前点i j k的方案数 // dp[i][j][k][1]:j在当前时刻,i k还在上次 // dp[i][j][k][2]:j k在当前时刻,i还在上次 // 那么就可以转移了 本题u<v 所以转移的时候从大到小 从后往前 #include <bits/stdc++.h> using namespace std; #define clc(a,…
D - Bags and Coins 思路:我们可以这样构造,最大的那个肯定是作为以一个树根,所以我们只要找到一个序列a1 + a2 + a3 .... + ak 并且ak为 所有点中最大的那个,那么我们a1, a2, a3..., ak-1 作为单独的点,其他没有涉及到的点套在ak的里面. 现在问题变成了找出a1, a2, a3, a4, ... , ak. 可以用bitset优化普通dp,因为要找路径,空间开不下,所以需要分段. #include<bits/stdc++.h> #defin…
题意:商品总价按四舍五入计算,n个物品最多可分\(d+1\)段,求最小代价 \(dp[i][j]\):\(j\)个物品分\(i\)段 注意一个技巧是只在需要分出新的段时才四舍五入(旧段结算),这样就避免了不知道分段具体位置无法\(dp\)的情况 数据量比较小就不使用滚动数组了 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cstdli…
C. The Fair Nut and String 递推分段形dp 题意 给出一个字符串选择一个序列\({p_1,p_2...p_k}\)使得 对于任意一个\(p_i\) , \(s[p_i]==a\) 对于任意一个\(p_{i}<j<p_{i+1}\)来说 \({\exists}s[p_j]==b\) 思路 所以我们可以得知 我们需要选择一系列a 使得a和a之间只能是b 那么我们就可以对a进行分段处理 例如aaaabaaaa 右面与前面组合 只能选择后面一大串a的前缀和前面一大串a的后缀组…
[HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP) 题面 有三个人从一张N个点无重边的有向无环图上的三个点出发,每单位时间,他们分别选择当前点的一条出边走下去.有向无环图点有点权,任意时刻他们所在的三个点两两点权相差不超过K.他们可以在任意三个点同时结束.求合法的路径总数.N≤50. 分析 暴力的做法,设\(dp[i][j][k]\)表示第一个人在i,第二个人在j,第三个人在k的方案数,然后枚举三个人接着到的地方x,y,z,倒推\(dp…
#include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <algorithm> using namespace std; typedef long long LL; +; ; ],head[N]; struct Edge{ int v,next; }edge[N*N/]; void add(int u,int v){ edge[tot].v=…
Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 38079   Accepted: 11904 Description Given a set of n integers: A={a1, a2,..., an}, we define a function d(A) as below: Your task is to calculate d(A). Input The input consists o…
题意 有一个只包含1和2的序列,试翻转一个区间,使得结果中非连续非递减数列最长. 思路 一. 作出1的前缀计数和为cnt1,2的后缀计数和为cnt2, 由于要找出[1,1,1][2,2,2][1,1,1][2,2,2]的四段,设中间的分割点是p,k,q,可得到 ans=cnt1[p]+cnt2[p+1]−cnt2[k+1]+cnt1[q]−cnt1[k]+cnt2[q+1]ans=cnt1[p]+cnt2[p+1]−cnt2[k+1]+cnt1[q]−cnt1[k]+cnt2[q+1] 化简得到…
题意:给定只有黑白两种颜色的序列A,B,每次可以选择一段连续的长度不超过k的区间将其染成同一种颜色,求把序列A变成B所需的最小操作次数. 首先需要找出一些最优解的特征: 1.如果序列A的第一个颜色和B的相同,那么可以忽略掉.如果相反,那么必须将其染成相反的颜色. 2.最优解不会交叉,因为假如出现交叉的话,那么中间交叉的一段相当于做了无用功. 这样就可以进行dp了,将操作从左往右进行,假设前i-1个位置都已经染好了,如果A和B的第i位相同,那么忽略掉,如果相反,那么把它染成相反的颜色,然后只需要考…
http://acm.hdu.edu.cn/showproblem.php?pid=1024 Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 45548    Accepted Submission(s): 16529 Problem Description Now I think you have g…
Scout YYF I Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10214   Accepted: 2980 Description YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into the enemy's base. After overcoming a series difficulties…
D. Slalom time limit per test:2 seconds memory limit per test:256 megabytes input:standard input output:standard output Little girl Masha likes winter sports, today she's planning to take part in slalom skiing. The track is represented as a grid comp…
在了解数位dp之前,先来看一个问题: 例1.求a~b中不包含49的数的个数. 0 < a.b < 2*10^9 注意到n的数据范围非常大,暴力求解是不可能的,考虑dp,如果直接记录下数字,数组会开不起,该怎么办呢?要用到数位dp. 数位dp一般应用于: 求出在给定区间[A,B]内,符合条件P(i)的数i的个数. 条件P(i)一般与数的大小无关,而与 数的组成 有关. 这样,我们就要考虑一些特殊的记录方法来做这道题.一般来说,要保存给定数的每个位置的数.然后要记录的状态为当前操作数的位数,剩下的…
概率类题目一直比较弱,准备把kuangbin大师傅总结的这篇题刷一下! 我把下面的代码换成了自己的代码! 原文地址:http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710606.html *************************************************************** 概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先…
在Android中,消息的传递控制主要是通过两个方法共同配合使用来对用户的触摸消息进行分发的,下面就来看看这两个方法: onInterceptTouchEvent:此方法定义于ViewGroup中,顾名思义,这个方法是用于ViewGroup拦截(intercept)触摸消息的: onTouchEvent:此方法定义于View中,用于处理用户的触摸事件: 下面来看这两个方法的定义原型: public boolean onInterceptTouchEvent(MotionEvent ev); pu…
题目链接: D. Kindergarten time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output In a kindergarten, the children are being divided into groups. The teacher put the children in a line and associated e…
P1056 能量项链 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2006 提高组 第一道 描述     在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记.因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能…