题干:

链接:https://ac.nowcoder.com/acm/contest/696/D
来源:牛客网

小K有n个雕塑,每个雕塑上有一个整数
若集合T中的每一个元素在n个雕塑上都能找得到,则称这个集合为一个优秀的集合

小K想知道所有大小<=k优秀的集合的价值和是多少

一个优秀的集合的价值可以用来表示

输入描述:

两个整数n,k,分别表示雕塑的数量与集合大小的上限
接下来n个整数表示第i个雕塑上的数字aiai是多少

输出描述:

一行表示所有大小<=k优秀集合的权值和

示例1

输入

复制

3 0
1 2 3

输出

复制

1

示例2

输入

复制

3 1
1 2 3

输出

复制

7

示例3

输入

复制

3 2
1 2 3

输出

复制

18

示例4

输入

复制

3 3
1 2 3

输出

复制

24

示例5

输入

复制

8 1
1 6 35 45 65 3 56 8

输出

复制

220

备注:

有10%10%的数据满足k=1

有30%30%的数据满足k=n

以上两个部分包含在100%100%的数据中,但不包含在前30%30%的数据中

对于前30%30%的数据,满足k≤n≤5k≤n≤5

对于100%100%的数据,满足n≤106,1≤ai≤5×103n≤106,1≤ai≤5×103

由于答案可能过大请对109+7取模后输出

解题报告:

题意好难懂啊、、、

注意到集合的性质:互异性。

根据鸽巢原理,很容易知道最多有m=5e3个数(去重之后)

然后设F[n][k]表示前n个数,取k个数的价值。(且已知这k个数一定互不相同。因为集合的互异性)

    F[n][k]=F[n-1][k]+F[n-1][k-1]*a[i]

效率O(m^2)。

当然这题也可以用01背包的方法将空间复杂度优化到一维。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 1e6 + 5;
const ll mod = 1e9+7;
ll dp[5005][5005];
int a[MAX],b[MAX];
int n,k;
int main()
{cin>>n>>k;for(int i = 1; i<=n; i++) cin>>a[i],b[i]=a[i];sort(b+1,b+n+1);int N = unique(b+1,b+n+1) - b - 1;dp[0][0]=1;for(int i = 1; i<=N; i++) {dp[i][0] = 1;for(int j = 1; j<=k; j++) {dp[i][j] = (dp[i-1][j] + dp[i-1][j-1] * b[i])%mod;}}ll ans = 0;for(int i = 0; i<=N && i<=k; i++) ans = (ans + dp[N][i])%mod;cout << ans << endl;return 0 ;
}

【牛客 - 696D】小K的雕塑(dp,鸽巢原理,01背包类问题)相关推荐

  1. c语言鸽巢原理,Codeforces 1188C DP 鸽巢原理

    题意:定义一个序列的beauty值为序列中元素之差绝对值的最小值,现在给你一个数组,问所有长度为k的子序列的beauty值的和是多少? 思路:(官方题解)我们先解决这个问题的子问题:我们可以求出bea ...

  2. 牛客网-小周的曲射炮

    牛客网-小周的曲射炮(公式推导) 题目描述 小周最近在玩一款二战游戏,他因而对曲射炮的轨迹产生了很大的兴趣,但是在尝试计算后,小周发现这个问题并不是那么简单,他因而来请教你这位计算机高手,请你来帮帮他 ...

  3. 【牛客CMB2 小招喵跑步】

    牛客CMB2 小招喵跑步 题目 解题思路 代码实例 运行代码 题目 小招喵喜欢在数轴上跑来跑去,假设它现在站在点n处,它只会3种走法,分别是: 1.数轴上向前走一步,即n=n+1 2.数轴上向后走一步 ...

  4. 小沙的remake(牛客)排序+ 树状数组 + dp

    原题链接:登录-专业IT笔试面试备考平台_牛客网 把a[i]先排序(带着下标排),然后从小到大每次先找下标在范围之内 [ i − b i , i ) 的所有种数,然后加一就是以a[i]为最后一个元素的 ...

  5. 牛客练习赛26B 烟花 (概率DP)

    链接:https://ac.nowcoder.com/acm/contest/180/B 来源:牛客网 烟花 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5 ...

  6. 牛客网小bai月赛40

    牛客网小白月赛40 A 数字游戏 B 跳跳跳 D 优美字符串 E 分组 F 过桥 G 空调遥控 I 体操队形 牛客比赛页面跳转 这是一篇菜鸟的自我总结,大佬勿喷,轻点轻点~ A 数字游戏 题目意思: ...

  7. 牛客网练习赛26B(简单的dp)

    题目链接:https://www.nowcoder.com/acm/contest/180/B 链接:https://www.nowcoder.com/acm/contest/180/B 来源:牛客网 ...

  8. 牛客练习赛60C 操作集锦(DP)

    题目链接 链接:https://ac.nowcoder.com/acm/contest/4853/C 来源:牛客网 题目描述 有一款自走棋有26种操作,每种操作我们都用a,b,c,d,-,x,y,z的 ...

  9. 牛客网-xinjun与阴阳师(背包DP)

    链接:https://ac.nowcoder.com/acm/problem/14602 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言2621 ...

最新文章

  1. 西门子smart200以太网通讯协议
  2. 计算机入域时域控用到的端口,AD域控制器使用端口的说明
  3. 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-目录
  4. 【Java调试】通过SqlSessionFactory类对象获取mapper文件内的动态SQL在执行时的完整SQL及参数(2种使用方法+测试Demo及结果)
  5. C++二维数组按行遍历和按列遍历的区别
  6. 商品微服务添加api接口
  7. Linux下查看txt文档
  8. python归一化函数_机器学习-归一化方法
  9. linux 驱动安装带参数,【转】Intel Linux显卡驱动安装指南
  10. 如何解决局域网共享报错0x80004005
  11. Mysql基础命令语句(1)
  12. 加装固态硬盘+安装win10系统
  13. openCV 出现 0x770413C5 (ntdll.dll) 第一机会异常: 0xC0000005: 读取位置 0x00000008 时发生访问冲突 解决办法
  14. 搭建云免流服务器教程,搭建云免流服务器教程
  15. 【艾琪出品】-【计算机】《办公自动化基础》-韩伟颖(2002)南开离线作业学习资料
  16. Windows server 2016密码重置
  17. LB10S-ASEMI整流桥LB10S
  18. 企业管理:名片的重要性
  19. 【MySQL】如何使用SQL语句获取表结构和获取全部表名
  20. Lesson 47 A cup of coffee 一杯咖啡

热门文章

  1. [0716] Jsoi B Rsss
  2. 欧盟无条件批准甲骨文收购Sun
  3. 与大家分享一下2010我的找工作历程!真累啊!不过都已经结束了!
  4. [Leetcode]第[58]题[JAVA][最后一个单词的长度][字符串]
  5. 猎豹网matlab视频百度云,猎豹网校C++ Primer初级全套视频教程
  6. matlab 写excel 慢_吐槽一下MATLAB的workspace
  7. rs232串口驱动_电脑主板RS232串口硬件设计
  8. sql每个月每个人的花销占比_11月:每个认真生活的人,都值得被认真对待
  9. php中介者,PHP设计模式 - 中介者模式
  10. python人工智能原理及其应用_人工智能原理与实践:基于Python语言和TensorFlow