• P1313计算系数


    这是2011年提高组第一题,一个数论题。如果当年我去的话,就爆零了wuwuwu.

    题目:(ax+by)^k中询问x^m*y^n这一项的系数是多少?拿到题我就楞了,首先便是想到DP,二维分别存次数代表系数,然后转移方程无法构造。又去推导公式,只推导了一个就放弃了,爆零......其实多推导几组后发现这个题的系数是杨辉三角,然后可以得出tpl[i][j]=tpl[i-1][j]+tpl[i-1][j-1](a=b=1),但是当a!=b!=1时,杨辉三角则变成了下方的形式,可以得出新的方程tpl[i][j]=tpl[i-1][j]*a+ tpl[i-1][j-1]*b 。 那么最后输出tpl[k+1][m+1]即可

      1        1(按照x的次数排)

     1 1                         2 3

    1 2 1                      4 12 9 

    1 3 3 1               8 36 54 27

    1 4 6 4 1

    1.见到数论题,注意手推公式,以后至少三组

    2.仔细审数据范围和数据特征,50%a=b=1,竟然没看到。还有就是m+n=k

    3.遍历的时候注意i从哪里开始,从哪里结束,嵌套的范围是怎样的 

    eg.初始i=1,j=1为1.那么i从第二行开始第k+1行结束;j从第一个开始,然后每一行的个数都等于行数,所以j<=i;

    4.好好学数学,静下心来,有些浮躁

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    using namespace std;
    int tpl[1005][1005];
    long long a,b,k,n,m;
    int main(){
        cin>>a>>b>>k>>n>>m;
        tpl[1][1]=1;
        for(int i=2;i<=k+1;i++){//i行j列   
            for(int j=1;j<=i;j++){
                tpl[i][j]=(tpl[i-1][j]*a+tpl[i-1][j-1]*b)%10007;
            }
        }
        cout<<tpl[k+1][m+1];//在第k+1行,m+1(y的系数) 
        return 0;
    }
  • 相关阅读:
    hdu 3068 Manacher算法
    用gitolite新建项目,clone后首次push,可能会出现: git: No refs in common and none specified; doing no
    Linux命令之nano
    linux下git使用记录1 git 提交
    Linux 删除文件夹和文件的命令
    UBUNTU 下GIT的安装
    mysql 常用命令
    mysql 数据类型
    SQL优化
    CSS入门教程——定位(positon)
  • 原文地址:https://www.cnblogs.com/china-mjr/p/11307148.html
Copyright © 2020-2023  润新知