zoukankan      html  css  js  c++  java
  • 组合数 序列

      

    问题 B: 序列

    时间限制: 1 Sec  内存限制: 256 MB

    题目描述

    输入

    5 3

    2 4 2 3 4

    输出

    39

    提示

       因为求的是子序列,不要求连续,所以点在集合里是可以随便选的,只要求出随便选的点的中的最大值即可。

       好麻烦。。换个思路,枚举最大值,找有多少个区间满足它最大,乘上就是它对答案的贡献。

        正解get 考试时1A。

        找区间直接用组合数就行了。最大就500万,打个表就行了。

        

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #define ll long long
    #define mod 1000000007
    using namespace std;
    int n,k,a[100005];
    ll ans=0,c[100005][55];
    void init()
    {
    	for(int i=0;i<=n;i++)
    	   for(int j=min(k+2,i);j>=0;j--)
    	      if(i==0||j==i||j==0)c[i][j]=1;
    	      else c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
    }
    int main()
    {
    	cin>>n>>k;
    	init();
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        sort(a+1,a+n+1);
        for(int i=k;i<=n;i++)ans=(ans+(a[i]*c[i-1][k-1])%mod)%mod;
        cout<<ans;
    }

  • 相关阅读:
    磁盘相关命令
    shell $用法
    setuid setgid stick bit 特殊权限 粘滞位
    运维面试题2
    mysql 外键约束
    创建MySQL 用户
    shell 脚本定时创建月份表
    apache 配置多个虚拟主机,不同的端口
    sublime3中文乱码解决包ConvertToUTF8.zip
    yii2安装
  • 原文地址:https://www.cnblogs.com/QTY2001/p/7632711.html
Copyright © 2011-2022 走看看