VJP1193 扫雷(状压)

链接

保存当前行和前一行两行的状态

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define N 10010
int a[N],dp[][][N],d[]={,,,};
int main()
{
int i,j,k,n,g;
while(scanf("%d",&n)!=EOF)
{
memset(dp,,sizeof(dp));
for(i = ; i <= n ; i++)
scanf("%d",&a[i]);
if(n==)
{
printf("1\n");
continue;
}
for(i = ; i <= ; i++)
{
for(j = ; j <= ; j++)
if(i+j==a[])
dp[i][j][] = ;
}
for(i = ; i <= n ; i++)
{
for(j = ; j < ; j++)
{
if(j>a[i]||j>a[i-])
continue;
for(g = ; g < ; g++)
{
if(j+g>a[i]||j+g>a[i-])
continue;
for(int e = ; e < ; e++)
{
if(j+g+e==a[i-])
dp[j][g][i] += dp[g][e][i-];
}
}
}
}
int ans=;
for(i = ; i < ; i++)
for(j = ; j < ; j++)
if(i+j==a[n])
ans+=dp[i][j][n];
printf("%d\n",ans);
}
return ;
}
上一篇:JavaBean基本用法示例(一)


下一篇:JavaBean基本用法示例(二)