bzoj1867:[noi1999]钉子和小球(dp)

Sakits Sakits     2022-09-17     478

关键词:

  一眼题...输出分数格式才是这题的难点QAQ

  学习了分数结构体...

技术分享
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio> 
#include<algorithm>
#define ll long long 
using namespace std;
const int maxn=60,inf=1e9;
struct fra{ll u,d;fra(ll a=0,ll b=1){u=a,d=b;}}f[maxn][maxn];
int n,m;
bool mp[maxn][maxn];
int readch()
{
    char ch=getchar();
    while(ch== ||ch==
||ch==	||ch==
)ch=getchar();
    return ch==*;
}
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
void sim(fra &x){ll t=gcd(x.u,x.d);x.u/=t;x.d/=t;}
fra operator+(fra x,fra y)
{
    ll t=gcd(x.d,y.d);
    fra c=fra(y.d/t*x.u+x.d/t*y.u,x.d/t*y.d);
    return sim(c),c;
}
fra operator*(fra x,fra y)
{
    fra c=fra(x.u*y.u,x.d*y.d);
    return sim(c),c;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    for(int j=1;j<=i;j++)
    mp[i][j]=readch();
    f[1][1]=fra(1,1);
    for(int i=1;i<=n;i++)
    for(int j=1;j<=i;j++)
    if(mp[i][j])f[i+1][j]=f[i+1][j]+f[i][j]*fra(1,2),f[i+1][j+1]=f[i+1][j+1]+f[i][j]*fra(1,2);
    else f[i+2][j+1]=f[i+2][j+1]+f[i][j];
    printf("%lld/%lld",f[n+1][m+1].u,f[n+1][m+1].d);
    return 0;
}
View Code

 

bzoj千题计划189:bzoj1867:[noi1999]钉子和小球

http://www.lydsy.com/JudgeOnline/problem.php?id=1867 dp[i][j]落到(i,j)的方案数dp[i][j]=0.5*dp[i-1][j] [(i-1,j)位置有钉子]+0.5*dp[i-1][j-1]  [(i-1.j-1)位置有钉子]+dp[i-1][j-2]  [(i-1,j-2) 查看详情

bzoj1867:[noi1999]钉子和小球dp(代码片段)

设f[i][j]为掉到f[i][j]时的概率然后分情况随便转移一下就好主要是要手写分数比较麻烦#include<iostream>#include<cstdio>usingnamespacestd;constintN=55;intn,m;chara[N][N];longlonggcd(longlonga,longlongb)return!b?a:gcd(b,a%b);s 查看详情

[poj1189][bzoj1867][codevs1709]钉子和小球

...;Description有一个三角形木板,竖直立放,上面钉着n(n+1)/2颗钉子,还有(n+1)个格子(当n=5时如图1)。每颗钉子和周围的钉子的距离都等于d,每个格子的宽度也都等于d,且除了最左端和最右端的格子外每个格子都正对着最下面一排... 查看详情

bzoj1867钉子和小球(代码片段)

题目链接简单$DP$$$dp[1][1]=1( ext显然)$$$$map[i][j]==‘*‘?dp[i+1][j]+=dp[i][j]/2,dp[i+1][j+1]+=dp[i][j]/2:dp[i+2][j+1]+=dp[i][j]$$如果直接输出概率这样就好,但是让写成分数咋整?开个结构体记录分子分母可以(好像大部分人这么做的)本宝宝一开始... 查看详情

bzojnoi1999钉子和小球动态规划+分数类

题目大意:不太好描写叙述,自己看吧。。思路:首先从最上面的点開始考虑。由于球一定是从最上面開始往下掉,所以球经过最上面的点的概率是1,然后他会有1/2的几率向左,1/2的几率向右,也就是以下的两个点均分上面点... 查看详情

poj1189钉子和小球

题目大意:一个三角形木板,竖直立放,上面钉着n(n+1)/2颗钉子,还有(n+1)个格子(当n=5时如图1)。每颗钉子和周围的钉子的距离都等于d,每个格子的宽度也都等于d,且除了最左端和最右端的格子外每个格子都正对着最下面一排... 查看详情

bzoj3243:[noi2013]向量内积

Description两个d维向量A=[a1,a2,...,ad]与B=[b1,b2,...,bd]的内积为其相对应维度的权值的乘积和,即:现有n个d维向量x1,...,xn,小喵喵想知道是否存在两个向量的内积为k的倍数。请帮助她解决这个问题Solution首先做一个转换:如果把\(B=A*A^T\... 查看详情

[bzoj]3243向量内积(noi2016)

  小C做了之后很有感觉的题目之一,但因为姿势不对调了很久。 Description  两个d维向量A=[a1,a2,...,ad]与B=[b1,b2,...,bd]的内积为其相对应维度的权值的乘积和,即:        现有n个d维向量x1,...,xn,小喵喵想知道是... 查看详情

bzoj1491[noi2007]社交网络

题解:Floyd应用d[i][j]两点最短路c[i][j]两点最短路条数转移若d[i][k]+d[k][j]<d[i][j]则c[i][j]=c[i][k]*c[k][j]若d[i][k]+d[k][j]==d[i][j]则c[i][j]+=c[i][k]*c[k][j];统计答案时当d[s][v]+d[v][t]==d[s][t]则对答案有贡献c[s][v]*c[v][t]/c[s][t] 查看详情

[bzoj4945][noi2017]游戏

题目大意:有$n$个位置,有三种数,每个位置只可以填一种数,$d(dleqslant8)$个位置有三种选择,其他位置只有两种选择。有一些限制,表示第$i$个位置选了某种数,那么第$j$个位置就只能选规定的数输出一组合法的选数方案,无解... 查看详情

bzoj1562[noi2009]变换序列:二分图匹配

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1562题意:  给定n,定义D(x,y)= min(|x-y|,n-|x-y|),然后给定数组d[i]=D(i,T[i])。  让你求一个0到n-1的排列T,下标i∈[0,n-1],满足给定的D(i,T[i]),且字典序最小。  若没有答案... 查看详情

[noi2006]神奇口袋

题面在这里题意开始时袋中有(t)种小球,第(i)种小球有(t_i)个,之后每次等概率取出一个球,第(i)次取球时观察这个球的颜色(c_i)放回并向袋中加入(d)个颜色为(c_i)的球;给出一组询问([x_i,y_i](1leilen)),求同时满足第(x_i)次取球的颜色为(y_... 查看详情

bzoj2006noi2010超级钢琴

补了下前置技能……题意就是求一段区间的权值和前k大的子序列的和。把段扔进优先队列每次拿出来之后按照所选择的j进行分裂#include<bits/stdc++.h>#defineN500005#definemp(a,b,c,d)(seg){a,b,c,d}usingnamespacestd;typedeflonglongll;structseg{inti,l,r,... 查看详情

bzoj3240noi2013—矩阵游戏

http://www.lydsy.com/JudgeOnline/problem.php?id=3240 (题目链接)题意  F[1][1]=1  F[i,j]=a*F[i][j-1]+b(j!=1)  F[i,1]=c*F[i-1][m]+d(i!=1)  求解F[n][m],a,b,c,d为常数。Solution  原来费马小定理对于矩阵乘法同样适用。。设a为一矩阵,p为... 查看详情

bzoj1497:[noi2006]最大获利&&3996:[tjoi2015]线性代数

给出一个N*N的矩阵B和一个1*N的矩阵C。求出一个1*N的01矩阵A.使得D=(A*B-C)*A^T最大。其中A^T为A的转置。输出D   Input第一行输入一个整数N,接下来N行输入B矩阵,第i行第J个数字代表Bij.接下来一行输入N个整数,代表矩... 查看详情

bzoj_1408_[noi2002]robot_数学

DescriptionInputOutputSampleInput3213251SampleOutput8675HINT 90号机器人有10个老师,加上它自己共11个。其中政客只有15号;军人有3号和5号;学者有8个,它们的编号分别是:2,6,9,10,18,30,45,90。$\sum\limits_d|n\mu(d)=n$因此总和为n。只需要求约数中... 查看详情

bzoj3243[noi2013]向量内积/uoj121

本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作。  本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description两个d维向... 查看详情

bzoj1497:[noi2006]最大获利

1#include<cstdio>2#include<iostream>3#include<cstring>4#defineM1000085#defineinf21390621436usingnamespacestd;7intT,head[M],next[10*M],u[10*M],v[10*M],d[M],n,m,cnt=1,ans,q[2*M],sum;8v 查看详情