记录编号 |
160312 |
评测结果 |
AAAAAAAAAA |
题目名称 |
走道铺砖问题 |
最终得分 |
100 |
用户昵称 |
wolf. |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.766 s |
提交时间 |
2015-04-24 23:16:57 |
内存使用 |
27.73 MiB |
显示代码纯文本
#include<iostream>
#include<fstream>
#include<bitset>
#include<vector>
#include<deque>
#include<map>
#include<set>
#include<queue>
#include<string>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<ctime>
#include<cstdio>
using namespace std;
#if defined wolf
const string ok="OK";
const string kk=" ";
ofstream nnew("floor.in",ios::app);
ifstream fin("floor.in");
#define fout cout
#define Endl endl
#else
ifstream fin("floor.in");
ofstream fout("floor.out");
#endif
class HDint{
public:
vector<int> num;
HDint(){
}
HDint(int a){
while(a/10000>0){
num.push_back(a%10000);
a=a/10000;
}
}
void operator = (int b){
num.push_back(b);
}
void pprint(){
fout<<num.back();
for(int i=num.size()-2;i>=0;--i){
fout<<setfill('0')<<setw(4)<<num[i];
}
}
};
HDint operator + (const HDint A,const HDint B){
/*cout<<A.num.back();
for(int i=A.num.size()-2;i>=0;--i){
fout<<setfill('0')<<A.num[i];
}
cout<<endl;
cout<<B.num.back();
for(int i=B.num.size()-2;i>=0;--i){
fout<<setfill('0')<<A.num[i];
}
cout<<endl;
*/
HDint ans;
int mmin=min(A.num.size(),B.num.size());
for(int i=0;i!=mmin;++i){
ans.num.push_back(A.num[i]+B.num[i]);
}
if(A.num.size()>B.num.size()){
for(int i=mmin;i<A.num.size();++i){
ans.num.push_back(A.num[i]);
}
}else{
for(int i=mmin;i<B.num.size();++i){
ans.num.push_back(B.num[i]);
}
}
int r=0;
for(int i=0;i!=ans.num.size();++i){
ans.num[i]+=r;
r=ans.num[i]/10000;
ans.num[i]=ans.num[i]%10000;
if(r>0&&i==ans.num.size()-1){
ans.num.push_back(0);
}
}
return ans;
}
int n,m;
HDint FF[45][13][1<<12];
void DP(int n,int p ,int now,int nex){
if(p>m){//查找的位置已经大于宽度
return;
}
FF[n][p][now]=FF[n-1][p][nex]+FF[n][p][now];
DP(n,p+1,now*2,nex*2+1);//不放的时候的状态
DP(n,p+1,now*2+1,nex*2);//竖着放置的状态
DP(n,p+2,now*4+3,nex*4+3);//横着放置的状态
}
int main(){
fin>>n>>m;
if(m>n){
swap(m,n);
}
for(int i=1;i<=m;++i){///////
FF[0][i][(1<<i)-1]=1;
}
for(int i=1;i<=n;++i){///////
DP(i,0,0,0);
}
FF[n][m][(1<<m)-1].pprint();
//fout<<FF[n][m][(1<<m)-1]<<endl;
//-------------------------*/
#if defined wolf
cout<<endl<<(double)clock()/CLOCKS_PER_SEC<<'s'<<endl;
#endif
return 0;
}
//Designed by wolf
//Fri Apr 24 2015