题目链接:
https://www.acwing.com/problem/content/1216/
题解:
一定要注意对于负数取余,要用数学上的定义,必须>=0
最后那个s也要记得用函数取余
AC代码:
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> using namespace std; const int N = 1010,MOD = 100000007; int f[N][N]; int getMod(int x,int m){ return ((x % m) + m) % m; } int main(void){ int n,s,a,b; cin >> n >> s >> a >> b; f[0][0] = 1; for(int i=1;i<n;i++){ for(int j=0;j<n;j++){ f[i][j] = (f[i-1][getMod(j-(n-i)*a,n)] + f[i-1][getMod(j+(n-i)*b,n)]) % MOD; } } cout << f[n-1][getMod(s,n)] << endl; }