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 students in a class working on group projects. The students will divide into groups (some students may be in groups alone), work on their independent pieces, and then discuss the results together. It takes the i-th student ai minutes to finish his/her independent piece.
If students work at different paces, it can be frustrating for the faster students and stressful for the slower ones. In particular, the imbalance of a group is defined as the maximum ai in the group minus the minimum ai in the group. Note that a group containing a single student has an imbalance of 0. How many ways are there for the students to divide into groups so that the total imbalance of all groups is at most k?
Two divisions are considered distinct if there exists a pair of students who work in the same group in one division but different groups in the other.
Input
The first line contains two space-separated integers n and k (1 ≤ n ≤ 200, 0 ≤ k ≤ 1000) — the number of students and the maximum total imbalance allowed, respectively.
The second line contains n space-separated integers ai (1 ≤ ai ≤ 500) — the time it takes the i-th student to complete his/her independent piece of work.
Output
Print a single integer, the number of ways the students can form groups. As the answer may be large, print its value modulo 109 + 7.
Sample Input
3 2
2 4 5
Sample Output
3
Hint
题意
有n个人,每个人有能力值ai,你需要去将这n个人分组
每一组的分值是这一个组的最大值减去最小值,你需要使得所有组的分值和小于等于k
问你方案数一共有多少种
题解:
dp
我们先排序,这样好DP
dp[i][j][k]表示考虑了i个人,现在open的组有j个(只有最小值,没有最大值的组),分值和为k的方案数
我们考虑第i个人加进去的时候,他对分值的贡献,应该是j*(a[i]-a[i-1]),不管这个数加到哪个组里面,贡献都是这个。
为什么?因为open的都在等待最大值的到来咯,考虑差分。
然后转移的时候,可以新开一个open,可以转移到open里面去,可以关闭一个open
空间开不下,滚一下就好了。
代码
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
int dp[2][205][1005];
int a[1005];
int n,k;
void update(int &x,int y)
{
x=(x+y)%mod;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+1+n);
dp[0][0][0]=1;
for(int i=1;i<=n;i++)
{
memset(dp[1],0,sizeof(dp[1]));
for(int j=0;j<=n;j++)
{
for(int p=0;p<=k;p++)
{
if(p+j*(a[i]-a[i-1])<=k)
{
update(dp[1][j][p+j*(a[i]-a[i-1])],dp[0][j][p]);
if(j>=1)
{
update(dp[1][j-1][p+j*(a[i]-a[i-1])],1LL*dp[0][j][p]*j%mod);
update(dp[1][j][p+j*(a[i]-a[i-1])],1LL*dp[0][j][p]*j%mod);
}
update(dp[1][j+1][p+j*(a[i]-a[i-1])],dp[0][j][p]);
}
}
}
memcpy(dp[0],dp[1],sizeof(dp[0]));
}
int ans = 0;
for(int i=0;i<=k;i++)
update(ans,dp[0][0][i]);
cout<<ans<<endl;
}
8VC Venture Cup 2016 - Elimination Round F. Group Projects dp的更多相关文章
- 8VC Venture Cup 2016 - Elimination Round F - Group Projects dp好题
F - Group Projects 题目大意:给你n个物品, 每个物品有个权值ai, 把它们分成若干组, 总消耗为每组里的最大值减最小值之和. 问你一共有多少种分组方法. 思路:感觉刚看到的时候的想 ...
- 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 ...
- 8VC Venture Cup 2016 - Elimination Round
在家补补题 模拟 A - Robot Sequence #include <bits/stdc++.h> char str[202]; void move(int &x, in ...
- 8VC Venture Cup 2016 - Elimination Round G. Raffles 线段树
G. Raffles 题目连接: http://www.codeforces.com/contest/626/problem/G Description Johnny is at a carnival ...
- 8VC Venture Cup 2016 - Elimination Round D. Jerry's Protest 暴力
D. Jerry's Protest 题目连接: http://www.codeforces.com/contest/626/problem/D Description Andrew and Jerr ...
- 8VC Venture Cup 2016 - Elimination Round (C. Block Towers)
题目链接:http://codeforces.com/contest/626/problem/C 题意就是给你n个分别拿着2的倍数积木的小朋友和m个分别拿着3的倍数积木的小朋友,每个小朋友拿着积木的数 ...
- codeforces 8VC Venture Cup 2016 - Elimination Round C. Lieges of Legendre
C. Lieges of Legendre 题意:给n,m表示有n个为2的倍数,m个为3的倍数:问这n+m个数不重复时的最大值 最小为多少? 数据:(0 ≤ n, m ≤ 1 000 000, n + ...
- 8VC Venture Cup 2016 - Elimination Round E. Simple Skewness 暴力+二分
E. Simple Skewness 题目连接: http://www.codeforces.com/contest/626/problem/E Description Define the simp ...
- 8VC Venture Cup 2016 - Elimination Round C. Block Towers 二分
C. Block Towers 题目连接: http://www.codeforces.com/contest/626/problem/C Description Students in a clas ...
随机推荐
- 独立服务器远程重装Linux系统
独立服务器远程重装Linux系统 http://rashost.com/blog/remote-reinstall-linux-dedicated-server 本文介绍怎样在没有console连接, ...
- Redis 分片实现 Redis Shard [www]
Redis 分片实现 Redis Shard https://www.oschina.net/p/redis-s ...
- 【Educational Codeforces Round20】
这场edu有点简单…… 所以题目可能也有点奇奇怪怪的. A.随意构造一下,可以发现只有当填满都不行时才可能无解. #include<bits/stdc++.h> using namespa ...
- C json实战引擎 二 , 实现构造部分
引言 这篇博文和前一篇 C json实战引擎一,实现解析部分设计是相同的,都是采用递归下降分析. 这里扯一点 假如你是学生 推荐一本书 给 大家 自制编程语言 http://baike.baidu.c ...
- canvas写的地铁地图
更新: 18-9-21:填了个坑,更新了canvas绘制过程. 根据的是百度提供的坐标,canvas的坐标是大的坐标在后面,所以跟实际生活方向相反. 所以canvas里的北方在下方,实际生活中北方在上 ...
- python 结束练习
1.文件操作有哪些模式?请简述各模式的作用 r 只读模式 r+ 读写 rb w 只写模式 w+ 写读 wb x 只写模式 x+ 写读 xb a 追加模式 a+ 写读 ab 2.s = '**hello ...
- HDU-1083
Courses Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- Edit Distance——经典的动态规划问题
题目描述Edit DistanceGiven two words word1 and word2, find the minimum number of steps required to conve ...
- Java学习笔记(十)——xml
[前面的话] 学习过程中还是效率不够高,老是容易注意力不集中,着急啊.不能在这样了,要好好学习,好好努力. 学习过程中的小知识点总结,基础知识,选择阅读. [xml定义] 定义:可扩展标记语言(英语: ...
- Centos7安装和配置Jira7.3.6
(1)安装jdk 1.下载jdk 链接:https://pan.baidu.com/s/1umdV-Cmm1wi1RP5clIJXmg 密码:zevc 2.安装jdk rpm -ivh jdk-8u1 ...