@ lzj20110120
100太小了
有两种解法
by Wangxiaolong666 @ 2024-02-05 09:33:24
```
#include<bits/stdc++.h>
using namespace std;
/*
int main()
{
long long a,n,m,x,s[10000],r[10000];
cin>>a>>n>>m>>x;
if(x==1||x==2)
{
cout<<a;
return 0;
}
s[1]=a;
r[1]=a;
r[2]=a;
int i=0;
while(1)
{
s[2]=i;
for(int j=3;j<n;j++)
{
s[j]=s[j-1]+s[j-2];
r[j]=r[j-1]+s[j-2];
}
if(r[n-1]==m)
{
cout<<r[x];
return 0;
}
i++;
if(i==1000)
break;
}
return 0;
}
*/
//##########################################################
//##########################################################
/*
int main()
{
long long a,n,m,x,s1[10000],s2[10000];
cin>>a>>n>>m>>x;
if(x==1)
{
cout<<a;
return 0;
}
if(x==n)
{
cout<<0;
return 0;
}
s1[2]=1,s1[3]=2;
for(int i=4;i<n;i++)
{
s1[i]=s1[i-1]+s1[i-2]-1;
s2[i]=s2[i-1]+s2[i-2]+1;
}
long long b=(m-a*s1[n-1])/s2[n-1];
cout<<a*s1[x]+b*s2[x];
return 0;
}
*/
```
by Wangxiaolong666 @ 2024-02-05 09:34:08
```cpp
//解题关键:动态规划+简单数学公式
#include<iostream>
using namespace std;
int C[21];
//设在第二站上车或下车的人数为k
//k为本题解题关键
int main()
{
int a, n, m, x;
cin >> a >> n >> m >> x;
C[0] = 0;
C[1] = 1;
//类似斐波那契数列
for (int i = 2; i < n - 1; i++)
{
C[i] = C[i - 1] + C[i - 2];
}
int k = 0;
//简单的数学公式推理,解出k值
k = (m- a - C[n - 3] * a) / (C[n - 2]-1);
//x站的人数公式:C[x - 2] * a + k * C[x - 1]+a-k
cout << C[x - 2] * a + k * C[x - 1]+a-k;
return 0;
}
by swuster27 @ 2024-02-15 21:45:58