蒜头君的新游戏

Posted caxi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蒜头君的新游戏相关的知识,希望对你有一定的参考价值。

技术图片

这题用用递归很简单,但是会运行超时,用dp看不太懂.

以下市是递归。

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm> 
 4 #include<math.h>
 5 #include<cstdio>
 6 using namespace std;
 7 int ccount = 0;
 8 void q(int current, int m ,int n)
 9 {
10     if(m==0&&current==0)
11         ccount++;
12     if(m>0)
13     {
14         q((current+n-1)%n,m-1,n);
15         q((current+n+1)%n,m-1,n);
16     }        
17 }
18 int main()
19 {
20     int n,m;
21     cin>>n>>m;
22     q(0,m,n);
23     cout<<ccount<<endl;
24     return 0;
25     
26 } 

以下是dp,看不太懂。话说任何dp问题都可以转化为递归是吧,dp的存在就是为了简化递归?

技术图片
 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm> 
 4 #include<math.h>
 5 #include<cstdio>
 6 using namespace std;
 7 int ccount = 0;
 8 void q(int current, int m ,int n)
 9 {
10     if(m==0&&current==0)
11         ccount++;
12     if(m>0)
13     {
14         q((current+n-1)%n,m-1,n);
15         q((current+n+1)%n,m-1,n);
16     }        
17 }
18 int main()
19 {
20 //    int n,m;
21 //    cin>>n>>m;
22 //    q(0,m,n);
23 //    cout<<ccount<<endl;
24     int m,n;
25     cin>>n>>m;
26     int f[35][35];
27     memset(f,0,sizeof(f));
28     f[0][1]=1;
29     for(int i =1;i<=m;i++ )
30     for(int j=1;j<=n;j++)
31     {
32         if(j==1)
33         {
34             f[i][j] = f[i-1][2]+f[i-1][n];
35         }else if(j==n)
36         {
37         f[i][j]=f[i-1][1]+f[i-1][n-1];
38         }else
39         {
40             f[i][j]=f[i-1][j-1]+f[i-1][j+1];
41         }
42     }
43     cout<<f[m][1]<<endl;
44     return 0;
45     
46 } 
View Code

 

以上是关于蒜头君的新游戏的主要内容,如果未能解决你的问题,请参考以下文章

蒜头君的新游戏

数组下标的应用——①蒜头君的数字游戏I

蒜头君的坐骑

蒜头君的树

新报数游戏

蒜头君的坐骑