原题传送门:
P8614 [蓝桥杯 2014 省 A] 波动数列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
分析:
分析完毕,上代码:
#include<iostream>
#include<vector>
using namespace std;
const int MOD=100000007;
int main(){
int n,s,a,b;
cin>>n>>s>>a>>b;
vector<vector<int>> dp(n+1,vector<int>(n,0));//dp[i][j]表示下标为1~i
dp[0][0]=1;
auto mod=[](int a,int n){
return (a%n+n)%n;
};
for(int i=1;i<=n;i++){
for(int j=0;j<n;j++){//mod(s-(n-i)*a是求上一次的j
dp[i][j]=(dp[i-1][mod(j-(n-i)*a,n)]+dp[i-1][mod(j+(n-i)*b,n)])%MOD;
}
}
cout<<dp[n-1][mod(s,n)]<<endl;
return 0;
}