洛谷,过河

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;

const int mod=25501;

bool pos[mod+10];
int ans=(1<<29);
int dp[mod+10];

int main(){
    int L;
    int s,t,m,x;
    scanf("%d",&L);
    int cnt=0;
    scanf("%d%d%d",&s,&t,&m);
    for (int i=1;i<=m;i++){
        scanf("%d",&x);
        pos[x%mod]=1;
        if(s==t&&x%t==0) cnt++;
    }
    if(s==t) {printf("%d\n",cnt);return 0;}
    memset(dp,0x3f,sizeof(dp));
    dp[0]=0;
    for (int i=1;i<=mod;i++){//要用mod,因为pos位置不知道mod到哪里去了,所以只能循环到mod
        for (int j=s;j<=t;j++){
            int h=i%mod;
            if(i-j>=0) dp[i]=min(dp[i],dp[i-j]+pos[h]);
        }
    }
    printf("%d",dp[mod]);
return 0;
}

dp很简单,但不知到为什么要mod 25501

看来考试只有顶着内存mod

 

posted @ 2018-08-23 19:15  lmjer  阅读(88)  评论(0编辑  收藏  举报