AcWing 1214. 波动数列
原题链接
中等
作者:
lvky.
,
2021-02-18 22:02:49
,
所有人可见
,
阅读 351
题目链接: 波动数列
参考: 某同学的波动序列
#include <iostream>
#include <cstring>
using namespace std;
int n,s,a,b;
const int MOD= 100000007;
int f[1005][1005];
int get_mod(int a,int b){//下标没有负的,取模的时候可能出现负数,所以要用个函数将负数转化为整数
return (a%b+b)%b;
}
int main(int argc, char** argv) {
cin>>n>>s>>a>>b;
f[0][0]=1;//选0个a或者-b且余数为0的时候也是一种方案
for(int i=1;i<n;i++){
for(int j=0;j<n;j++){
f[i][j]=(f[i-1][get_mod((j-(n-i)*a),n)]+f[i-1][get_mod((j+(n-i)*b),n)])%MOD;
}
}
cout<<f[n-1][get_mod(s,n)]<<endl;//长度为 n的序列就是选n-1个a或者-b且余数为s%n的
return 0;
}