69,371
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
/*
M*N
*/
int m,n,f;
bool flag=false;
int f1(int k) //2*k递推
{
if(k==1)
{
return 1;
}
else if(k==2)
{
return 2;
}
else
{
return f1(k-1)+f1(k-2);
}
}
int f2(int k) //整个矩阵递推
{
if(k==0) //mark
{
return 1;
}
if(k==1) //mark
{
if(flag)
{
return 1;
}
else
{
return 0;
}
}
if(flag) //当前排可以完全横放
{
return (f-1)*f2(k-2)+f2(k-1);
}
else //必须有竖放的
{
return f*f2(k-2);
}
}
int getResult()
{
if(m%2!=0 && n%2!=0)
{
return -1;
}
if(m%2==0)
{
f=f1(n);
if(n%2==0)
{
flag=true;
}
return f2(m);
}
if(n%2==0)
{
f=f1(m);
if(m%2==0)
{
flag=true;
}
return f2(n);
}
return -1;
}
int main()
{
cin>>m>>n;
cout<<getResult()<<endl;
return 0;
}
#include <iostream>
using namespace std;
/*
M*N
*/
int m,n,f;
bool flag=false;
int f1(int k) //2*k递推
{
if(k==1)
{
return 1;
}
else if(k==2)
{
return 2;
}
else
{
return f1(k-1)+f1(k-2);
}
}
int f2(int k) //整个矩阵递推
{
if(k<=1)
{
return 1;
}
if(flag) //当前排可以完全横放
{
return (f-1)*f2(k-2)+f2(k-1);
}
else //必须有竖放的
{
return f*f2(k-2);
}
}
int getResult()
{
if(m%2!=0 && n%2!=0)
{
return -1;
}
if(m%2==0)
{
f=f1(n);
if(n%2==0)
{
flag=true;
}
return f2(m);
}
if(n%2==0)
{
f=f1(m);
if(m%2==0)
{
flag=true;
}
return f2(n);
}
return -1;
}
int main()
{
cin>>m>>n;
cout<<f1(m)<<" "<<f1(n)<<endl;
cout<<getResult()<<endl;
return 0;
}