zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Python爬虫连载9-JS加密之“盐”​、ajax请求
    Java连载86-List集合详解
    HTML连载69-透视属性以及其他属性练习
    Java连载85-集合的Contains和Remove方法
    Python爬虫连载8-JS加密(一)
    Java连载84-Collection的常用方法、迭代器
    HTML连载68-形变中心点、形变中心轴
    Java连载83-单向链表、双向链表、collections常用方法
    [刷题] 447 Number of Boomerangs
    [刷题] 454 4Sum II
  • 原文地址:https://www.cnblogs.com/china-mjr/p/11307148.html
Copyright © 2011-2022 走看看