1 solutions
-
-1
#include<bits/stdc++.h> using namespace std; const int N=1e7+20; int f[N]; //f[i]表示走到第i个位置的经过的最少的石头的数目 int w[N]; //w[i]=1表示i这个位置上有石头 int main() { int L; int s,t,m; cin>>L>>s>>t>>m; for(int i=1;i<=m;i++) { int x; cin>>x; w[x]=1; //记录这个位置有石头 } memset(f,0x3f,sizeof f); f[0]=0; for(int i=1;i<=L+t;i++) //枚举走到的点 { for(int k=i-t;k<=i-s;k++) //可以从哪个位置过来 { if(k>=0) //合法距离 f[i]=min(f[i],f[k]+w[i]); } } int res=100000; for(int i=L;i<=L+t;i++) //枚举跳过后跳到的位置 { res=min(res,f[i]); } cout<<res; return 0; }
- 1
Information
- ID
- 2117
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 5
- Tags
- # Submissions
- 12
- Accepted
- 4
- Uploaded By