洛谷,过河
#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