题目大意:

给定\(n\)个数\(a[1]\sim a[n]\),让你把它分为若干个集合,使每个集合内最大值与最小值的差的总和不超过\(K\)。问总方案数。

解题思路:

一道很神的dp题。

首先将数进行排序,然后将这些数扔数轴上,则集合价值相当于在数轴上覆盖这些点所用的最短线段的长度(当然长度可以为0)。

考虑dp,设\(f[i][j][k]\)表示考虑了前\(i\)个点,目前还未确定右端点的集合还有\(j\)条,目前的总价值为\(k\),则

不论如何,新加进\(a[i+1]-a[i]\)这条线段,对\(j\)个集合均有影响,因此会增加价值为\((a[i+1]-a[i])\times j\),设其为\(t\)。

转移分四种情况:

1. 该点单独成一个集合,则\(j\)不变,仅有1种情况,\(f[i+1][j][k+t]+=f[i][j][k]\);
2. 该点作为某个集合的中间元素,则\(j\)也不变,对于\(j\)个集合都有可能,因此\(f[i+1][j][k+t]+=f[i][j][k]\times j\);
3. 该点作为一个集合的起点,则集合数多了1,仅有1种情况,\(f[i+1][j+1][k+t]+=f[i][j][k]\);
4. 该点作为一个集合的终点,则集合数少了1,对于\(j\)个集合都有可能,因此\(f[i+1][j−1][k+t]+=f[i][j][k]\times j\)。

答案为\(\sum\limits_{i=0}^K f[n][0][i]\)。

时空复杂度均为\(O(n^2K)\),空间复杂度可以用滚动数组优化到\(O(nK)\)。

C++ Code:

#include<bits/stdc++.h>
using namespace std;
const int md=1e9+7;
int n,K,cur,a[201],dp[2][201][1001];
int main(){
ios::sync_with_stdio(0),cin.tie(0);
cin>>n>>K;
for(int i=1;i<=n;++i)cin>>a[i];
sort(a+1,a+n+1);
dp[1][1][0]=dp[1][0][0]=cur=1;
for(int i=1;i<n;++i){
const int otr=cur;
memset(dp[cur^=1],0,sizeof dp[0]);
for(int j=0;j<=i;++j){
const int t=j*(a[i+1]-a[i]);
for(int k=0;k+t<=K;++k){
dp[cur][j][k+t]=(dp[cur][j][k+t]+dp[otr][j][k]*(j+1ll)%md)%md;
if(j<n)dp[cur][j+1][k+t]=(dp[cur][j+1][k+t]+dp[otr][j][k])%md;
if(j)dp[cur][j-1][k+t]=(dp[cur][j-1][k+t]+1ll*dp[otr][j][k]*j%md)%md;
}
}
}
int ans=0;
for(int i=0;i<=K;++i)
ans=(1ll*dp[cur][0][i]+ans)%md;
cout<<ans<<endl;
return 0;
}

[Codeforces 626F]Group Projects的更多相关文章

  1. Codeforces 626F Group Projects(滚动数组+差分dp)

    F. Group Projects time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...

  2. Codeforces 626F Group Projects (DP)

    题目链接  8VC Venture Cup 2016 - Elimination Round 题意  把$n$个物品分成若干组,每个组的代价为组内价值的极差,求所有组的代价之和不超过$k$的方案数. ...

  3. 【CodeForces】626 F. Group Projects 动态规划

    [题目]F. Group Projects [题意]给定k和n个数字ai,要求分成若干集合使得每个集合内部极差的总和不超过k的方案数.n<=200,m<=1000,1<=ai< ...

  4. Codeforces 8VC Venture Cup 2016 - Elimination Round F. Group Projects 差分DP*****

    F. Group Projects   There are n students in a class working on group projects. The students will div ...

  5. 8VC Venture Cup 2016 - Elimination Round F. Group Projects dp

    F. Group Projects 题目连接: http://www.codeforces.com/contest/626/problem/F Description There are n stud ...

  6. [Codeforces626F] Group Projects (DP)

    Group Projects Description There are n students in a class working on group projects. The students w ...

  7. 8VC Venture Cup 2016 - Elimination Round F - Group Projects dp好题

    F - Group Projects 题目大意:给你n个物品, 每个物品有个权值ai, 把它们分成若干组, 总消耗为每组里的最大值减最小值之和. 问你一共有多少种分组方法. 思路:感觉刚看到的时候的想 ...

  8. [CF626F]Group Projects

    [CF626F]Group Projects 题目大意: 有一个长度为\(n(n\le200)\)的数列\(\{A_i\}\),将其划分成若干个子集,每个子集贡献为子集\(\max-\min\).求子 ...

  9. codeforces A. Group of Students 解题报告

    题目链接:http://codeforces.com/problemset/problem/357/A 题目意思:将一堆人分成两组:beginners 和 intermediate coders .每 ...

随机推荐

  1. 微信小程序:获取地理定位和显示相应的城市名称。

    最近在看微信小程序,遇到地理定位显示城市名称的问题.本文就是记录这一过程. 解决方案                                                          ...

  2. DNS解析流程原理(图例)

    13台根服务器的dns: 1.root-servers.net198.41.0.4美国2.root-servers.net192.228.79.201美国(另支持IPv6)3.root-servers ...

  3. 轻量级Java EE开发框架设计系统应用架构

    首先来说一下Java EE 概述 其中常说的三大框架即是:ssh Spring:功能强大的组件粘合济,能够将你的所有的java功能模块用配置文件的方式组合起来(还让你感觉不到spring的存在)成为一 ...

  4. RabbitMQ学习总结(7)——Spring整合RabbitMQ实例

    1.RabbitMQ简介 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消息队列协议)的标准实现.  官网:http://www.rabbitmq. ...

  5. sso 系统分析

    一.什么是 sso 系统 SSO 英文全称 Single Sign On,单点登录.SSO 是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他 ...

  6. HDU 1171 Big Event in HDU(多重背包)

    Big Event in HDU Problem Description Nowadays, we all know that Computer College is the biggest depa ...

  7. 关于 xftp 上传文件时,仅仅是上传了0字节的问题

    有两次,上传的时候出现了问题.能上传.可是上传过去的文件都是0字节.查看了各种配置,都是正常的:百思不得解: 后来想起近期在linuxserver运行apt-get update时,中间曾失败过,于是 ...

  8. 2014秋C++ 第7周项目 数据类型和表达式

    课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课 ...

  9. 从HTTP 2.0想到的关于传输层协议的一些事

    0.HTTP协议的历史 我也不知道... 1.关于HTTP 2.0 收到了订阅的邮件,头版是说HTTP 2.0的内容,我本人不是非常关注HTTP这一块儿.可是闲得无聊时也会瞟两眼的.HTTP 2.0的 ...

  10. php匿名函数和可变参数函数

    php匿名函数和可变参数函数 简介 直接上代码了: <?php $test1 = function($value) { echo $value; }; $test1('HelloWorld'); ...