mrkdian的专栏

递归的方法会超时。

只有靠递推解决。

递推:

#include<cstdio>#include<cstring>int l,s,t,n;int DP[100010]={};int main(){while(~scanf("%d%d%d%d",&l,&s,&t,&n)){memset(DP,0,sizeof(DP));for(int i=1;i<=n;i++){int temp;scanf("%d",&temp);DP[temp]=1;}int ans=0;for(int i=l-t;i>=0;i–){int temp=DP[i+s];for(int j=s+1;j<=t;j++){if(DP[i+j]<temp) temp=DP[i+j];}DP[i]+=temp;}printf("%d\n",DP[0]);}return 0;}递归:

#include<cstdio>#include<cstring>int l,s,t,n;int DP[100010]={};bool stone[100001]={};int dp(int g){if(DP[g]!=0) return DP[g];if(stone[g]==1) DP[g]+=1;if(g+t>=l) return DP[g];int key=dp(g+s);for(int i=s+1;i<=t;i++){int temp=dp(g+i);if(temp<key) key=temp;}DP[g]+=key;return DP[g];}int main(){while(~scanf("%d%d%d%d",&l,&s,&t,&n)){memset(DP,0,sizeof(DP));memset(stone,0,sizeof(stone));for(int i=1;i<=n;i++){int temp;scanf("%d",&temp);stone[temp]=1;}printf("%d\n",dp(0));}return 0;}

,人总是珍惜未得到的,而遗忘了所拥有的

mrkdian的专栏

相关文章:

你感兴趣的文章:

标签云: