欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

EOJ2999-计算多项式的系数(递归)

程序员文章站 2022-07-03 18:26:22
...

题目

给定一个多项式
EOJ2999-计算多项式的系数(递归)
计算多项式展开后以下项的系数
EOJ2999-计算多项式的系数(递归)

输入

第 1 行:一个整数 T (1≤T≤100000)为问题数。
接下来共 T 行。每行 5 个整数,分别为 a,b,k,n,m,整数之间由一个空格分隔。0≤k≤1,000,000,0≤n,m≤k,且 n+m=k,0≤a,b≤10^9。

输出

对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等)。
然后对应每个问题在一行中输出一个整数,表示所求的系数(这个系数可能很大,输出对 10007 取模后的值)。

思路EOJ2999-计算多项式的系数(递归)

EOJ2999-计算多项式的系数(递归)

代码

#include <iostream>
#include <algorithm>
int mo = 10007;
long long int dp[1001][1001];
using namespace std;

long long int pow(int a, int b) {
    long long int result = 1;
    while (b--)
        result = (result * a) % mo;
        //一定要每乘一次取模一次,否则结果是错误的
    return result;
}

int main() {
    int turn;
    int a,b,k,n,m;
    cin >> turn;
    dp[0][0] = 1;
    
    for (int i = 0; i < turn; i++) {
        cin >> a >> b >> k >> n >> m;
        
        //先初始化数组
        for (int j = 1; j <= n; j++)
            dp[j][0] = pow(a, j) ;
        for (int j = 1; j <= m; j++)
            dp[0][j] = pow(b, j) ;

        //填充数组
        for (int ni = 1; ni <= n; ni++) 
            for (int mi = 1; mi <= m; mi++) 
                dp[ni][mi] = (a * dp[ni - 1][mi] + b * dp[ni][mi - 1]) % mo;
            
        cout << "case #" << i << ":" << endl;
        cout << dp[n][m] << endl;
    }
    
    return 0;
}