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)$ , 遍历它 (树的每个节点都访问至少一次) 所需的最小代价. 这里的代价由具体问题所定 ...
随机推荐
- TADOConnection组件
该组件用于建立数据库的连接.ADO的数据源组件和命令组件可以通过该组件运行命令及数据库中提取数据等. 该组件用于建立数据库的连接,该连接可被多个数据集所共享,但是并不是应用程序中必须的,因为ADO数据 ...
- sqlserver2008出现数据库主体在该数据库中拥有架构,无法删除的解决方案
当要删除数据库中的某个用户名的时候会报错 出现数据库主体在该数据库中拥有架构,无法删除的解决方案(MicrosoftSQLServer,错误:15138) 和sql server2000不同 第一:这 ...
- Spark SQL读写方法
一.DataFrame:有列名的RDD 首先,我们知道SparkSQL的目的是用sql语句去操作RDD,和Hive类似.SparkSQL的核心结构是DataFrame,如果我们知道RDD里面的字段,也 ...
- [django]django model的查询和更新
再分享Django系列的另外几篇文章: Django model select的各种用法详解:https://mp.weixin.qq.com/s/JVh4UnS2Tql9gUVaBSoGuA Dja ...
- (转)Docker镜像构建上下文(Context)
镜像构建上下文(Context) Docker在构建镜像时,如果注意,会看到 docker build 命令最后有一个 ... 表示当前目录,而 Dockerfile 就在当前目录,因此不少初学者以为 ...
- git 不区分文件大小写的处理
- [LeetCode] 860. Lemonade Change_Easy tag: Greedy
At a lemonade stand, each lemonade costs $5. Customers are standing in a queue to buy from you, and ...
- [LeetCode] 441. Arranging Coins_Easy tag: Math
You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...
- Xception网络结构理解
Xception网络是由inception结构加上depthwise separable convlution,再加上残差网络结构改进而来/ 常规卷积是直接通过一个卷积核把空间信息和通道信息直接提取出 ...
- python 定义函数 两个文件调用函数
在def_function.py文件里面写 #coding=utf-8 #定义函数 def hello(): print "hello world" 在test.py里面调用 #c ...