原题传送门ios
果断dp!!!
dp[i]表示第i远的旅店到终点的路程数.spa
那么,若j(j<i)能够到达i,就将dp[j]加上dp[i].code
过于简单,不过多解释.
时间复杂度:O(n2).
空间复杂度:O(n).ci
#include<iostream> #include<algorithm> using namespace std; int a[50]={0,990,1010,1970,2030,2940,3060,3930,4060,4970,5030,5990,6010,7000}; int dp[50]; int A,B,n; int main() { cin>>A>>B>>n; for(int i=1;i<=n;i++) { cin>>a[13+i]; } n+=13; sort(a+1,a+n+1); dp[n]=1; for(int i=n;i>=0;i--) { for(int j=i+1;j<=n;j++) { if (a[j]-a[i]>=A&&a[j]-a[i]<=B) dp[i]+=dp[j]; } } cout<<dp[0]<<endl; return 0; }