CF626F Group Projects

 有n个学生,每个学生有一个能力值ai。现在要把这些学生分成一些(任意数量的)组,每一组的“不和谐度”是该组能力值最大的学生与能力值最小的学生的能力值的差。求所有不和谐度之和不超过k的分组方案总数。

输入输出样例

输入 #1复制

3 2
2 4 5

输出 #1复制

3

输入 #2复制

4 3
7 8 9 10

输出 #2复制

13

输入 #3复制

4 0
5 10 20 21

输出 #3复制

1

hint:n<=200,k<=1000

sol:

把a排序
注意到不和谐度一定是一个终点的值-起点的值,中间可能还有几个非终非起的点,随便放即可
dp[i,j,k]表示前i个数,还有j个起点未匹配,当前总贡献为k个方案数
转移就是枚举当前点做起点,中间点,终点

然后就会挂的很惨,有一种很坑的东西,就是一个点既是起点又是终点

/*
把a排序
注意到不和谐度一定是一个终点的值-起点的值,中间可能还有几个非终非起的点,随便放即可
dp[i,j,k]表示前i个数,还有j个起点未匹配,当前总贡献为k个方案数
转移就是枚举当前点做起点,中间点,终点
然后就会挂的很惨,有一种很坑的东西,就是一个点既是起点又是终点
*/
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{ll s=0; bool f=0; char ch=' ';while(!isdigit(ch))    {f|=(ch=='-'); ch=getchar();}while(isdigit(ch)) {s=(s<<3)+(s<<1)+(ch^48); ch=getchar();}return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{if(x<0) {putchar('-'); x=-x;}if(x<10) {putchar(x+'0'); return;}write(x/10); putchar((x%10)+'0');
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int Mod=1000000007,N=205;
int n,m,a[N];
int dp[2][N][1005];
inline void Ad(int &x,int y)
{x+=y; x-=(x>=Mod)?Mod:0;
}
int main()
{freopen("codeforces626F_data.in","r",stdin);int i,j,k,t;R(n); R(m);for(i=1;i<=n;i++) R(a[i]);sort(a+1,a+n+1);dp[t=0][0][0]=1;for(i=1;i<=n;i++){t^=1;for(j=0;j<=min(i,n>>1);j++){int oo=a[i]-a[i-1];for(k=0;k<=m;k++){dp[t][j][k]=0;if(j&&k>=(j-1)*oo) Ad(dp[t][j][k],dp[t^1][j-1][k-(j-1)*oo]);if(k>=j*oo) Ad(dp[t][j][k],1LL*dp[t^1][j][k-j*oo]*j%Mod);if(k>=(j+1)*oo) Ad(dp[t][j][k],1LL*dp[t^1][j+1][k-(j+1)*oo]*(j+1)%Mod);if(k>=j*oo) Ad(dp[t][j][k],dp[t^1][j][k-j*oo]);}}}int ans=0;for(i=0;i<=m;i++) Ad(ans,dp[t][0][i]);Wl(ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/gaojunonly1/p/11279610.html

codeforces626F相关推荐

  1. 【刷题记录】排列dp

    文章目录 [AtCoder-ABC209-f] Deforestation [AtCoder-Educational DP Contest-T]Permutation 「JOI Open 2016」摩 ...

最新文章

  1. 利用SeekFree的核心板调试MM32F3277的ISP功能
  2. Ansible — 编程 — Variables
  3. [转]Oracle update用例
  4. 屏上有一层紫色(正在找原因)
  5. DIY协同办公平台(C/S)系列4之通讯录篇
  6. 如何获取exception的target异常_三个好习惯,帮你写好Python里的异常处理
  7. Python-OpenCV中的cv2.threshold
  8. JAVA中为什么要用接口定义编程_【Java公开课|为什么要用Java接口,这些内容你一定要搞清楚】- 环球网校...
  9. Mac Brew Uninstall MySql
  10. 软件测试面试之智力题
  11. html 显示不可见字符,真实用! 一键清除不可见字符
  12. 手把手教你如何免费把多张图片合并为PDF文件,一看就懂。
  13. DSP-28027笔记
  14. Calendar.getInstance() gives error in Android Studio
  15. WFA程序C#窗体间传值
  16. 我的爱好作文玩计算机800,我的爱好作文800字
  17. Matlab做一个刚体运动仿真,模拟小车避障
  18. 基于Word的论文多级标题与图表题注的解决办法
  19. vs2019 加载.obj文件报错找不到403 IIS 3D可视化.obj/.mtl文件找不到
  20. 生而不凡的EOS区块链技术

热门文章

  1. 互联网时代大数据的核心价值
  2. 关于最长公共子序列的执行过程
  3. 最短路算法总结(入门版)
  4. 专访浪潮王虹莉 探互联网服务器市场的未来
  5. ubuntu 防火墙打开关闭
  6. 9.切换 iframe
  7. 2.MyBatis 动态SQL
  8. 1.Power Designer 由数据库反向生成pdm文件
  9. [BZOJ4756] [Usaco2017 Jan]Promotion Counting(线段树合并)
  10. java中需要用equals来判断两个字符串值是否相等