zoukankan      html  css  js  c++  java
  • luoguP5087 数学(滚动数组优化dp 水体)

    小奔热衷于乘法,他最喜欢做的事情是:从一个有N个元素的序列里取出K个数,(注意:不能取同一个元素好几次,取不同但是值相同的元素则是允许的) 然后算出这K个数的积作为这个组合的分数。

    小奔想试遍所有的这些组合,然后算出所有这些组合的分数之和。但是他还要 出模拟赛虐爆我们这些蒟蒻,所以他只好把这个任务交给了你。

    小奔~~(在某些方面)~~还是很仁慈的,所以你不用写高精度,只要输出答案膜10000000071000000007的结果就可以了。


             因为题目点进去的,然而并不数学()。

            做法见文章标题。

            

    #include<bits/stdc++.h>
    #define maxn 100000+5
    #define mod 1000000007
    #define maxn2 1000+5 
    #define LL long long
    #define re register int 
    using namespace std;
    int n,k;
    LL num[maxn];
    LL f[2][maxn2];
    inline int read()
    {
        int x=0;
        char ch=getchar();
        while(!isdigit(ch))
        ch=getchar();
        while(isdigit(ch))
        {
            x=x*10+ch-'0';
            ch=getchar();
        }
        return x; 
    }
    inline void write(LL x)
    {
        if(x>9) write(x/10);
        putchar(x%10+'0');
    }
    int main()
    {
        n=read();
        k=read();
        for(re i=1;i<=n;i++)
        num[i]=read();
        f[0][0]=1;
        for(int i=1;i<=n;i++) 
        for(re j=0;j<=min(i,k);j++)
        f[i&1][j]=(f[(i-1)&1][j]+f[(i-1)&1][j-1]*num[i]%mod)%mod;
        write(f[n&1][k]);
        return 0;
        
     } 
    View Code
  • 相关阅读:
    在线文件转换工具
    中鸣机器人官网
    下载tortoisegit
    知晓云,不用申请服务器即可完成小程序后台开发和部署
    全网音乐免费下载工具
    MySQL5.7 主从复制配置
    Nginx-------Nginx的安装和多域名配置
    如何获取域名(网址)对应的IP地址
    LOGO免费在线设计
    Jmeter-----保存到响应文件
  • 原文地址:https://www.cnblogs.com/3200Pheathon/p/11406005.html
Copyright © 2011-2022 走看看