cf-Round #216 (Div. 2) -D Valera and Fools-dfs

来源:互联网 发布:西安百度快照优化 编辑:程序博客网 时间:2024/05/21 17:43

对于任意状态,给定第一个人和第二个人,就可以知道这个状态的形式。

那么任意状态只与第一个人和第二个人有关系。

vis[a][b]: 第一个人为a,第二个人为b的状态。

dfs求解。

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;int cnt;int p[5001];int s[5001];int n,m;int vis[5001][5001];void dfs(int a,int b,int k){    if(k>m)return;    if(a>n)a=n+1;    if(b>n)b=n+1;    if(vis[a][b])return;    vis[a][b]=1;cnt++;   // cout<<a<<" "<<b<<endl;   if(p[a])   {       if(s[b])dfs(b+1,b+2,k+1);       if(s[b]<100)dfs(a,b+1,k+1);   }   if(p[a]<100)   {       if(s[b])dfs(b,b+1,k+1);   }}int main(){    int i;    while(~scanf("%d%d",&n,&m))    {        memset(vis,0,sizeof(vis));        memset(p,0,sizeof(p));        memset(s,0,sizeof(s));        for(i=1;i<=n;i++)        {            scanf("%d",&p[i]);        }        for(i=n;i>=1;i--)        {            s[i]=max(s[i+1],p[i]);        }        cnt=0;        if(n>1)dfs(1,2,0);        else cnt=1;        cout<<cnt<<endl;    }}


原创粉丝点击