【动态规划】线性dp: P1052 过河
·


#include<iostream>
#include<cstring>
using namespace std;
int L;
int S,T,M;
int x[101];
int dp[100001];
int main(){
cin>>L;
cin>>S>>T>>M;
memset(dp,0x3f,sizeof(dp));
dp[0]=0;
int flag;
for(int i=1;i<=M;i++){
cin>>flag;
x[flag]=1;
}
for(int i=1;i<=L;i++){
if(x[i]==1){
for(int j=S;j<=T&&i-j>=0;j++)
dp[i]=min(dp[i],dp[i-j]+1);
}
else{
for(int j=S;j<=T&&i-j>=0;j++)
dp[i]=min(dp[i],dp[i-j]);
}
}
cout<<dp[L];
return 0;
}
只能过一部分样例,因为1e9太大,需要用到离散化
更多推荐
所有评论(0)