原題傳送門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; }