HZOI20190816模拟23minewatergcd的解题思路是什么?

2026-04-01 23:421阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1115个文字,预计阅读时间需要5分钟。

HZOI20190816模拟23mine/water/gcd的解题思路是什么?

A:Amine只是一个简单的dp。博主太厉害了。

设f[i][j],表示到达第i位,状态是j的方案数,其中j属于[0,5]。

$f[j][0]=0$,表示填0的方案数;$f[j][1]=1$,表示填1的方案数;$f[j][2]=f[j-1][1]$,表示Amine+的方案数;$f[j][3]=f[j-1][2]$,表示Amine++的方案数;$f[j][4]=f[j-1][3]$,表示Amine+++的方案数;$f[j][5]=f[j-1][4]$,表示Amine++++的方案数。

A:mine只是一个简单的dp。。。。是博主太蒻了。。。设f[i][j],表示到第i位,状态是j的方案数,其中$j\in[0,5]$j0表示填0,j1表示填1,且i-1位是雷;j2

A:mine

只是一个简单的dp。。。。是博主太蒻了。。。

设f[i][j],表示到第i位,状态是j的方案数,其中$j\in[0,5]$

j==0表示填0,j==1表示填1,且i-1位是雷;

j==2表示填2,j==3表示填雷,j==5表示填1,且i-1位不是雷

思考一下,得到方程:

      $f[i][4]=f[i-1][3]$ $f[i][1]=f[i-1][4]+f[i-1][0]$

      $f[i][3]=f[i-1][1]+f[i-1][2]+f[i-1][3]$ $f[i][0]=f[i-1][4]+f[i-1][0]$ $f[i][2]=f[i-1][3]$

然后就没什么了

HZOI20190816模拟23mine/water/gcd的解题思路是什么?

#include#include#include#include#define int long longusing namespace std;const int MAXN=1e6+1;const int mod=1e9+7;int len,ans=0,f[2][5];char s[MAXN];signed main(){scanf("%s",s+1);len=strlen(s+1);if(s[1]==‘*‘) f[1][3]=1;else if(s[1]==‘1‘) f[1][1]=1;else if(s[1]==‘0‘) f[1][0]=1;else if(s[1]==‘?‘) f[1][3]=f[1][1]=f[1][0]=1;for(int i=2;i<=len;i++){f[iif(s[i]==‘?‘){f[if[if[if[if[i}else if(s[i]==‘1‘){f[if[i}else if(s[i]==‘*‘){f[i}else if(s[i]==‘0‘){f[i}else{f[i}}ans=((f[lenprintf("%lld\n",ans);return 0;}

B:water

一个块的高度就是从这个块走出矩形的所有路径上的最大值的最小值。

相邻块连边,权值为两块的较大值,矩形边界的块向矩形外连边,权值为 max(高度,0),

做最小生成树,然后每个点的积水高度就是这个点到根节点路径上的最大边权减去这个点的点权

#include#include#include#include#define MAXN 305#define inf 0x7fffffffusing namespace std;int n,m,a[MAXN][MAXN],dep[MAXN*MAXN];int calc(int i,int j){return (i-1)*m+j;}struct node{int fr,to,w,nxt;friend bool operator <(node a,node b){return a.w

C:gcd

并不是gcd,好像有mobius反演的内容,博主先咕了

本文共计1115个文字,预计阅读时间需要5分钟。

HZOI20190816模拟23mine/water/gcd的解题思路是什么?

A:Amine只是一个简单的dp。博主太厉害了。

设f[i][j],表示到达第i位,状态是j的方案数,其中j属于[0,5]。

$f[j][0]=0$,表示填0的方案数;$f[j][1]=1$,表示填1的方案数;$f[j][2]=f[j-1][1]$,表示Amine+的方案数;$f[j][3]=f[j-1][2]$,表示Amine++的方案数;$f[j][4]=f[j-1][3]$,表示Amine+++的方案数;$f[j][5]=f[j-1][4]$,表示Amine++++的方案数。

A:mine只是一个简单的dp。。。。是博主太蒻了。。。设f[i][j],表示到第i位,状态是j的方案数,其中$j\in[0,5]$j0表示填0,j1表示填1,且i-1位是雷;j2

A:mine

只是一个简单的dp。。。。是博主太蒻了。。。

设f[i][j],表示到第i位,状态是j的方案数,其中$j\in[0,5]$

j==0表示填0,j==1表示填1,且i-1位是雷;

j==2表示填2,j==3表示填雷,j==5表示填1,且i-1位不是雷

思考一下,得到方程:

      $f[i][4]=f[i-1][3]$ $f[i][1]=f[i-1][4]+f[i-1][0]$

      $f[i][3]=f[i-1][1]+f[i-1][2]+f[i-1][3]$ $f[i][0]=f[i-1][4]+f[i-1][0]$ $f[i][2]=f[i-1][3]$

然后就没什么了

HZOI20190816模拟23mine/water/gcd的解题思路是什么?

#include#include#include#include#define int long longusing namespace std;const int MAXN=1e6+1;const int mod=1e9+7;int len,ans=0,f[2][5];char s[MAXN];signed main(){scanf("%s",s+1);len=strlen(s+1);if(s[1]==‘*‘) f[1][3]=1;else if(s[1]==‘1‘) f[1][1]=1;else if(s[1]==‘0‘) f[1][0]=1;else if(s[1]==‘?‘) f[1][3]=f[1][1]=f[1][0]=1;for(int i=2;i<=len;i++){f[iif(s[i]==‘?‘){f[if[if[if[if[i}else if(s[i]==‘1‘){f[if[i}else if(s[i]==‘*‘){f[i}else if(s[i]==‘0‘){f[i}else{f[i}}ans=((f[lenprintf("%lld\n",ans);return 0;}

B:water

一个块的高度就是从这个块走出矩形的所有路径上的最大值的最小值。

相邻块连边,权值为两块的较大值,矩形边界的块向矩形外连边,权值为 max(高度,0),

做最小生成树,然后每个点的积水高度就是这个点到根节点路径上的最大边权减去这个点的点权

#include#include#include#include#define MAXN 305#define inf 0x7fffffffusing namespace std;int n,m,a[MAXN][MAXN],dep[MAXN*MAXN];int calc(int i,int j){return (i-1)*m+j;}struct node{int fr,to,w,nxt;friend bool operator <(node a,node b){return a.w

C:gcd

并不是gcd,好像有mobius反演的内容,博主先咕了