CF24D Broken robot 后效性DP】的更多相关文章

这题咕了好久..... 设$f[i][j]$表示从$(i,j)$到最后一行的期望步数: 则有 $ f[i][1]=\frac{1}{3}(f[i][1]+f[i][2]+f[i+1][1])+1$ $ f[i][m]=\frac{1}{3}(f[i][m]+f[i][m-1]+f[i+1][m])+1$ $ f[i][j]=\frac{1}{4}(f[i][j]+f[i][j-1]+f[i][j+1]+f[i+1][j])+1$ 所以他有后效性(于是我们疯狂迭代) 然而要高斯消元.... 具体的…
Broken Robot Description 你作为礼物收到一个非常聪明的机器人走在矩形板上.不幸的是,你明白它已经破碎并且行为相当奇怪(随机).该板由N行和M列单元组成.机器人最初位于第i行和第j列的某个单元格中.然后在每一步,机器人都可以去另一个细胞.目的是走到最底层(N.排.机器人可以停留在当前单元格中,向左移动,向右移动或移动到当前单元格下方的单元格.如果机器人位于最左侧的列中,则它不能向左移动,如果它位于最右侧的列中,则它不能向右移动.在每一步中,所有可能的动作都是同样可能的.返回…
[题解]CF24D Broken Robots http://codeforces.com/problemset/problem/24/D 解1(不会写,口胡的) 获得一个比较显然的转移式子 \(dp(i,j)\)代表在\((i,j)\)坐标需要期望的走的次数 \[ dp(i,j)=0.25(1+dp(i-1,j)+dp(i,j-1)+dp(i,j+1)) \] 然而我们可以发现这个式子不满足无后效性..也找不到一种合适的顺序DP. 我们发现可以高斯消元,但是\(O(n^4)\)的复杂度我们接受…
题目链接 题意 有一个\(n \times m\)的矩阵.机器人从点\((x,y)\)开始等概率的往下,往右,往左走或者不动.如果再第一列,那么不会往左走,再第m列不会往右走.也就是说机器人不会走出这个格子.走到最后一行会停止.求出机器人期望行走的步数. 思路 设\(f[i][j]\)表示从\((i,j)\)走到最后一行的期望步数. 显然最后一行的答案为0 然后考虑其他行.假设\(j!=m\)并且\(j!=1\)那么有 \[f[i][j]=1+\frac{1}{4}(f[i][j+1]+f[i]…
D. Broken robot time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You received as a gift a very clever robot walking on a rectangular board. Unfortunately, you understood that it is broken a…
有后效性的DP:$f[u]$表示到$u$的期望次数,$f[u]=\Sigma_{(u,v)} (1-\frac{p}{q})*f[v]*deg[v]$,最后答案就是$f[u]*p/q$ 刚开始$f[1]=1$,,因为炸弹初始在$1$号节点.所以增广矩阵中$a[1][n+1]=1$. 系数矩阵$a[i][i]$赋值为1,其他点的系数写成负数,相当于是所有的加起来$=0$. #include<cstdio> #include<iostream> #include<cmath>…
[IOI2002]任务安排 ★☆ 输入文件:batch.in 输出文件:batch.out 简单对比 时间限制:1 s 内存限制:128 MB N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti.在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和(同一批任务将在同一时刻完成).每个任务的费用是它的完成时刻乘以一个费用系数Fi.请确定一个分…
Luogu Description 你收到的礼物是一个非常聪明的机器人,行走在一块长方形的木板上.不幸的是,你知道它是坏的,表现得相当奇怪(随机).该板由n行和m列的单元格组成.机器人最初是在i行和j列的某个单元格上.然后在每一步机器人可以到另一个单元.目的是去底层(n次)行.机器人可以停留在当前单元,向左移动,向右边移动,或者移动到当前下方的单元.如果机器人在最左边的列不能向左移动,如果它是在最右边的列不能向右移动.在每一步中,所有可能的动作都是同样可能的.返回步的预期数量达到下面的行. So…
题意 题目链接 Sol 今天上午的A题.想出来怎么做了但是没时间写了qwq 思路很简单,首先把转移方程列一下,发现每一个位置只会从下一行/左右转移过来,而且第N行都是0,那么往下转移的都可以回带. 剩下的也可以联立一下直接解(我在说什么..) 然后推一推就行了.对于我这种平均每两个符号写错一个的来说可能调起来比较自闭qwq #include<bits/stdc++.h> #define Pair pair<double, double> #define MP(x, y) make_…
题目链接 题意:给定一个\(n\times m\)的矩阵,每次可以向→↓←移动一格,也可以原地不动,求从\((x,y)\)到最后一行的期望步数. 此题标签\(DP\) 看到上面这个肯定会想到 方法一: \(f[i][j]\)表示表示从\((x,y)\)走到\((i,j)\)的期望步数,正推 方法二: \(f[i][j]\)表示从\((i,j)\)走到最后一行的期望步数,倒推 事实上,方法二更优秀. 因为如果用方法一,我们要求的答案就是\(\frac{\sum f[\text{最后一行}][\te…
存在有后效性的dp,但转移方程 f[i] = min( f[i], s[i] + sigma f[j] ( j 是后效点) ) 每次建当前点和 转移点的边 e1, 某点和其会影响的点 e2 spfa 利用以前的转移点更新答案,然后将所有受到其影响的点放入队列中再次更新 spfa 处理有后效性的dp #include<bits/stdc++.h> #define int long long #define rep(i,x,y) for(register int i=x;i<=y;i++)…
https://codeforces.com/contest/1140/problem/E 局部dp + 定义状态取消后效性 题意 给你一个某些位置可以改变的字符串,假如字符串存在回文子串,那么这个字符串就是坏的,问有多少好的串(n<=2e5) 题解 首先发现只需要保证\(s[i-2]!=s[i]\)(局部保证),就可以保证不存在回文子串 直接计算有多少个好的串(即不存在回文子串的情况) 分奇偶位考虑,因为假如奇偶位都合理,那么就不存在1,2,3,2,1这种情况,这个序列考虑奇数位是1,3,1,…
\(Naptime\) \(solution:\) 这道题不做多讲,它和很多区间DP的套路一致,但是这一道题它不允许断环成链,会超时.但是我们发现如果这只奶牛跨夜休息那么它在不跨夜的二十四个小时里一定也可达到休息时间的!所以我们只需要在做一次DP然后强制选则第一个小时休息即可. \(code:\) #include<iostream> #include<cstdio> #include<iomanip> #include<algorithm> #includ…
pro:给定N*M的矩阵,以及初始玩家位置. 规定玩家每次会等概率的向左走,向右走,向下走,原地不动,问走到最后一行的期望.保留4位小数. sol:可以列出方程,高斯消元即可,发现是三角矩阵,O(N*M)----元素个数.  也可以用反复逼近答案. 反复做,dp[i][j]=(dp[i][j+1]+dp[i][j-1]+dp[i][j]+dp[i-1][j])/d[j]+1.0  为了使逼近效果更好,我每次先左一次,再右一次. #include<bits/stdc++.h> #define r…
题意:在n*m的网格中,某个物体初始置于点(x,y),每一步行动都会等概率地停留在原地/往左/往右/往下走,求走到最后一行的的步数的数学期望,其中n,m<1000 lyd告诉我们这种题目要倒推处理.设\(f[i][j]\)为(i,j)到(n,k)的步数期望,k为任意数 那么对于各种边界有如下情况 \(f[n][j]=0\) \(f[i][1]=\frac{1}{3}f[i][1]+\frac{1}{3}f[i][2]+\frac{1}{3}f[i+1][1]+1\) \(f[i][m]=\fra…
D. Broken robot 链接. 题意: 一个方格,从(x,y)出发,等价的概率向下,向左,向右,不动.如果在左右边缘上,那么等价的概率不动,向右/左,向下.走到最后一行即结束.求期望结束的步数. 分析: 因为不能往上走,所以行与行之间存在转移,即上一行转移到下一行. 同一行内的位置可以互相转移,所以可以对每一行内进行高斯消元,那么复杂度是$O(n^4)$,但是发现高斯消元的矩阵中每行只有三个位置有数,这个矩阵叫三对角矩阵,观察这个矩阵,发现可以O(n)消元.复杂度$O(n^2)$ 代码:…
CodeForces 24D Broken robot 大致题意:你有一个n行m列的矩形板,有一个机器人在开始在第i行第j列,它每一步会随机从可以选择的方案里任选一个(向下走一格,向左走一格,向右走一格,留在原地),现在我们要求它走到最后一行的期望步数 \(solution:\) 这道题我们可以从最后一行开始递推,但是我们很快发现会有一些难以解决的方程.因为每一行的每一个格子都可以组成一个方程,但是这些格子都是未知的,只有他们的下一行的所有格子已知(我们从下向上倒推,这是一个惯用套路).也就是说…
poj2228 分第一天是否熟睡DP两次 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> using namespace std; ],f[][][]; void DP1() { ; memset(f[now],-,sizeof(f[now])); f[now][][]=f[now][][]=; ;i<=n;i…
这道题的难点在于,前面分组的时间会影响到后面的结果 也就是有后效性,这样是不能用dp的 所以我们要想办法取消后效性 那么,我们就可以把影响加上去,也就是当前这一组加上了s 那么就把s对后面的影响全部加上 这个做法非常巧妙. #include<cstdio> #include<algorithm> #include<cstring> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace…
3875: [Ahoi2014]骑士游戏 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 181  Solved: 91[Submit][Status][Discuss] Description [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会 扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽. [问题描述] 在这个游戏中,JYY一共有两种攻击方式,一种是普通攻击,一种是法术攻 击.两种攻击方式都会消耗JY…
之前题目看错了.. 先用双倍字符串处理后效性 首先要确定一个结论:如果原串s中相距为d的ch1和ch2只有一对,那么如果第一个翻开ch1,第二个翻开ch2,就能确定k 现在要求的是当我们第一次翻开的是ch1时,第二次翻哪个位置成功的概率最高 设这个概率为p,ans=sigma(cnti/n * pi),i∈['a','z'] 那么我们枚举d,对每种字符找到这个最大的d即可 . #include<bits/stdc++.h> using namespace std; ][][]; <<…
You received as a gift a very clever robot walking on a rectangular board. Unfortunately, you understood that it is broken and behaves rather strangely (randomly). The board consists of N rows and M columns of cells. The robot is initially at some ce…
题意: 有一个N行M列的矩阵,机器人最初位于第i行和第j列.然后,机器人可以在每一步都转到另一个单元.目的是转到最底部(第N个)行.机器人可以停留在当前单元格处,向左移动,向右移动或移动到当前位置下方的单元格.如果机器人在最左侧的列中,则不能向左移动:如果机器人在最右侧的列中,则不能向右移动.在每一步中,所有可能的移动都是同等可能的.返回到达最底行的预期步数. 代码+题解: #include<stdio.h> #include<string.h> #include<math.…
题目链接 可能这儿的会更易懂一些(表示不想再多写了). 令\(f[i][j]\)表示从\((i,j)\)到达最后一行的期望步数.那么有\(f[n][j]=0\). 若\(m=1\),答案是\(2(n-x)\). 否则,显然有\[f[i][1]=\frac13(f[i+1][1]+f[i][1]+f[i][2])+1\\f[i][j]=\frac14(f[i+1][j]+f[i][j]+f[i][j-1]+f[i][j+1])+1,\ 1<j<m\\f[i][m]=\frac13(f[i+1][…
Problem K. Kitchen Robot Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100610 Description Robots are becoming more and more popular. They are used nowadays not only in manufacturing plants, but also at home. One programmer wit…
题意是: 给你一些钱 m ,然后在这个国家买东西, 共有 n 件物品,每件物品有  价格 P    价值 V    还有一个很特别的属性 Q, Q 指 你如过想买这件物品 你的手中至少有这钱Q . 虽然你只要花费 钱P ,但你的手中至少有钱Q,如果不足Q ,不能买.问给你钱M ,列出N件物品,最多能获得多少价值的东西.... 这道题如果没有Q的限制的话就是一道01背包的水题,但是加上了Q的限制这就是一道考察对DP的深刻理解的题目了,好多题解上说按照p-q从大到小排序即可,但是至于为什么并没有说透…
暴力DP求解太卡时间了...........写挫一点就跪了 //hdu robot #include <cstdio> #include <iostream> #include <cmath> #include <cstring> using namespace std; inline void RD(int &ret) { char c; do { c = getchar(); } while(c < '0' || c > '9') ;…
Robot Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total Submission(s): 5906    Accepted Submission(s): 1754 Problem Description Michael has a telecontrol robot. One day he put the robot on a loop with n cells.…
题意:n*m的棋盘,一个机器人在(i,j)处,每次等概率地停在原地,向左移动一格,向右移动一格,向下移动一格(不能移出棋盘).求走到最后一行所需期望步数.n<=1000,m<=1000 一个看起来可以用来DP的顺序是永远只能从上面走到下面,但同一行之间的转移会出现环.如果n和m的范围稍微小一点,我们可以像SDOI走迷宫一题跑一个分层的高斯消元,但这个题的范围比较大,会超时,但这道题的背景暗示我们列出来的方程组会比较规则,我们不妨先把方程列出来看看有什么特点. 设F[i][j]为从第i行第j列走…
题意:长度为n的排列,m次交换xi, yi,每个交换x,y有50%的概率不发生,问逆序数的期望  .n, m <= 1000 思路:我们只用维护大小关系,dp[i][j]表示位置i的数比位置j的数大的概率. 那么每次交换x和y.  假设x<y,那么区间就有三种:  [1,x-1],[x+1,y-1], [y+1,N], 不难证明这三个区间和xy处的逆序对关系变为二者和的一半. #include<bits/stdc++.h> #define rep(i,a,b) for(int i=…