[P2327] [SCOI2005]扫雷

来源:互联网 发布:蜂蜜淘宝 编辑:程序博客网 时间:2024/05/23 16:06

原题链接

DP
看到一个超简洁的题解

以下为引用
若将所有情况都一一枚举是不现实的,时间太长了
其实只需由两个即可确定下面的所有格子
因为数字只可能从左上、左、左下来
知道前面的再通过数字就可确定第三个
知道了第三个,再结合第二个,就是下一个数的前两个,同理可一直推下去

#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#include<cmath>#include<queue>#include<vector>#include<climits>#include<string>#include<cstdlib>#include<ctime>#define LL long long#define MOD 1000000007#define pi 3.141592653589using namespace std;int b[10005],a[10005],ans,n;int judge(){    int i;    b[0]=0;    b[n+1]=0;    for(i=1;i<=n;i++)    {        b[i+1]=a[i]-b[i-1]-b[i];        if(b[i+1]>1||b[i+1]<0) return 0;    }    if(b[n+1]==0) return 1;    return 0;}int main() {    int i;    scanf("%d",&n);    for(i=1;i<=n;i++)        scanf("%d",&a[i]);    for(b[1]=0;b[1]<2;b[1]++)        ans+=judge();    printf("%d",ans);    return 0;} 
原创粉丝点击