1214. 波动数列(负数取余公式)

题目链接:

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;
}
原文地址:https://www.cnblogs.com/doubest/p/12291414.html