oj练习---dp专题
1.POJ 3744 Scout YYF I
经典的dp模型,但是要用到快速矩阵幂加速,分段的思想
# include <stdio.h>
# include <algorithm>
# include <string.h>
# include <iostream>
using namespace std; int mines[]; void matrixMulti(double a[][], double b[][]){
double i,j,k,l;
i = a[][]*b[][]+a[][]*b[][];
j = a[][]*b[][]+a[][]*b[][];
k = a[][]*b[][]+a[][]*b[][];
l = a[][]*b[][]+a[][]*b[][];
a[][]=i,a[][]=j,a[][]=k,a[][]=l;
} double quickPow(const double p, int x){
if(x == -){
return 1.0;
}
double a[][] = {, , -p, p}, res[][] = {,,,};
while(x){
//printf("this 3\n");
if(x&){
matrixMulti(res, a);
}
x/=;
matrixMulti(a,a);
}
return res[][]*(-p);
} int main(){
int num;
double p, result;
while(scanf("%d%lf",&num, &p) != EOF){
memset(mines, , sizeof(mines));
for(int i = ; i <= num; ++i){
scanf("%d", mines + i);
}
if(mines[] == ){
printf("%.7f\n", 0.0);
continue;
}
mines[] = ;
result = 1.0;
sort(mines, mines+num+);
for(int i = ; i <= num; ++i){
result *= quickPow(p, mines[i] - mines[i - ] - );
}
if(result < ){
result = ;
}
if(result > ){
result =;
}
printf("%.7f\n", result);
}
return ;
}
心得:1.dp[i]=dp[i-2]*(1-p)+dp[i-1]*p,其实就是连续跟1-p/p相乘,自然想到矩阵加速。2.快速幂的思想,将O(n)降成O(lg(n))。
3.[0, 1; 1-p, p] * [dp[i-2]; dp[i-1]] = [dp[i-1]; dp[i]],然后变成幂运算之后就可以加速了。多次乘以相同的数值其实就是幂运算(一个数就是整数幂,多个数的式子就是矩阵幂)
2.POJ 2096 Collecting Bugs
经典的dp求期望的题,注意理解反向求期望的思想,以及C++整数除法跟数学上的除法的区别(他是下取整的)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <fstream>
using namespace std; double dp[][];
int main()
{
int n, s;
double a, b, c, d;
//cout << sizeof(dp);
while(scanf("%d%d", &n, &s) != EOF){
memset(dp, , sizeof(dp));
for(int i = n; i >= ; --i){
for(int j = s; j >= ; --j){
if(i==n&&j==s)continue;
a = 1.0*(n-i)/n*j/s;
b = 1.0*i/n*(s-j)/s;
c = 1.0*i/n*j/s;
d = 1.0*(n-i)/n*(s-j)/s;
dp[i][j] = (a * dp[i+][j]+b*dp[i][j+]+d*dp[i+][j+] + 1.0)/(1.0-c);
}
}
printf("%.4f\n",dp[][]);
}
return ;
}
心得:1.C++整数除法跟数学上的除法的区别(他是下取整的)2.反向求期望的思想跟期望的性质E(aA+bB+....) = aE(A)+bE(B)+.....3.本题的递推公式需要变形计算一下:dp[i][[j] = a*dp[i+1][j]+b*dp[i][j]+c*dp[i][j+1]+d*dp[i+1][j+1]+14.动态规划矩阵的边界条件的控制。容易变坑,尤其是2维情况下
oj练习---dp专题的更多相关文章
- 决策单调性优化dp 专题练习
决策单调性优化dp 专题练习 优化方法总结 一.斜率优化 对于形如 \(dp[i]=dp[j]+(i-j)*(i-j)\)类型的转移方程,维护一个上凸包或者下凸包,找到切点快速求解 技法: 1.单调队 ...
- 状压dp专题复习
状压dp专题复习 (有些题过于水,我直接跳了) 技巧总结 : 1.矩阵状压上一行的选择情况 \(n * 2^n\) D [BZOJ2734][HNOI2012]集合选数 蒻得不行的我觉得这是一道比较难 ...
- 树形dp专题总结
树形dp专题总结 大力dp的练习与晋升 原题均可以在网址上找到 技巧总结 1.换根大法 2.状态定义应只考虑考虑影响的关系 3.数据结构与dp的合理结合(T11) 4.抽直径解决求最长链的许多类问题( ...
- 区间dp专题练习
区间dp专题练习 题意 1.Equal Sum Partitions ? 这嘛东西,\(n^2\)自己写去 \[\ \] \[\ \] 2.You Are the One 感觉自己智力被吊打 \(dp ...
- DP专题训练之HDU 2955 Robberies
打算专题训练下DP,做一道帖一道吧~~现在的代码风格完全变了~~大概是懒了.所以.将就着看吧~哈哈 Description The aspiring Roy the Robber has seen a ...
- DP专题:划分数问题
一.这个专题有什么用 练练DP 练练组合数学 ...... 二.正题 此类问题有如下几种形态: 1. 将n划分成若干正整数之和的划分数.2. 将n划分成k个正整数之和的划分数.3. 将n划分成最大数不 ...
- 【dp专题】NOIP真题-DP专题练习
这里学习一下DP的正确姿势. 也为了ZJOI2019去水一下做一些准备 题解就随便写写啦. 后续还是会有专题练习和综合练习的. P1005 矩阵取数游戏 给出$n \times m$矩阵每次在每一行取 ...
- dp专题训练
****************************************************************************************** 动态规划 专题训练 ...
- 树形DP专题
DP是我的弱项, 此专题意在总结树形DP的解题思路. 最小代价遍历一棵树 给定一棵带边权的树 $T=(V,E)$ , 遍历它 (树的每个节点都访问至少一次) 所需的最小代价. 这里的代价由具体问题所定 ...
随机推荐
- 轻量级ORM工具Simple.Data
今天推举的这篇文章,本意不是要推举文章的内容,而是据此介绍一下Simple.Data这个很有意思的类ORM工具. 现在大家在.NET开发中如果需要进行数据访问,那么基本都会使用一些ORM工具,比如微软 ...
- vue中computed和watch的用法
computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理: computed比较适合对多个变量或 ...
- vue-3.0创建项目
.npm install --global @vue/cli .npm install -g @vue/cli-init .vue init webpack my-project
- Stylus的使用
vue-cli项目安装使用stylus步骤:1. npm install stylus -D命令,在项目内安装stylus.(注意:命令结尾 -D 即是 --save-dev 的简写形式) 2.需要安 ...
- python按修改时间顺序排列文件
import os def sort_file_by_time(file_path): files = os.listdir(file_path) if not files: return else: ...
- 循环匹配出图片地址(即src属性)
<script type="text/javascript"> //思路分两步:作者(yanue). //1,匹配出图片img标签(即匹配出所有图片),过滤其他不需要的 ...
- node—基础命令
1.安装node,在任意文件夹下按shift键选中“在此处打开PowerShell窗口”或者直接在开始菜单输入cmd启动 2.常用命令: c: 如果我们想访问c盘,那么我们需要在命令行中输入c:就行了 ...
- js, css混淆
原理:调用yuicompressor-2.4.8.jar, 生成混淆后的文件,强大的它能处理css,js. 1,准备一个txt,列出所需要合并的js,如js.txt jquery-1.9.1.min. ...
- python math random
很有用个的工具 值得好好看看,这是作者(python发明者)对于工作中使用到的大多数场景的提炼 //test.py 1 import math 2 3 print abs(-10) 4 print m ...
- jquery实现记住用户名和密码
这里我们选择的方法是cookie的方式去记录 首先我们写将用户名和密码写到cookie的js代码 //保存到cookie function save_cookies(){ if($("#re ...