题目链接  8VC Venture Cup 2016 - Elimination Round

题意  把$n$个物品分成若干组,每个组的代价为组内价值的极差,求所有组的代价之和不超过$k$的方案数。

考虑DP,$f[i][j][k]$表示考虑到第$i$个物品的时候,还有$j$组尚未分配完毕,当前状态总代价为$k$的方案数。

先把$a[]$升序排序,那么极差就可以转化为后面的元素减前面的元素不停叠加的效果。

当考虑第$i$个物品的时候有$4$种转移方法:

当前物品新开一组并且继续等待分配;

当前物品新开一组,并且这个物品单独当做一种;

当前物品插入到之前的$j$组中的一组中去并让这个组继续等待分配,那么有$j$种插入的方案;

当前物品插入到之前的$j$组中的一组中去并作为这个组的最大值(停止分配),同样有$j$种插入的方案。

时间复杂度$O(n^{2}k)$

#include <bits/stdc++.h>using namespace std;#define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b)    for (int i(a); i >= (b); --i)
#define MP      make_pair
#define fi      first
#define se      secondtypedef long long LL;const int N  = 202;
const int M  = 1010;
const LL mod = 1e9 + 7;int n, m;
int a[N];
int x;
LL f[2][N][M];
LL ans;void up(LL &x, LL y){ x = x + y; x %= mod;}int main(){scanf("%d%d", &n, &m);rep(i, 1, n) scanf("%d", a + i);sort(a + 1, a + n + 1);a[0] = a[1];f[0][0][0] = 1;x = 1;rep(i, 0, n - 1){x ^= 1;memset(f[x ^ 1], 0, sizeof f[x ^ 1]);rep(j, 0, i){rep(k, 0, m) if (f[x][j][k] && k + j * (a[i + 1] - a[i]) <= m){int cnt = k + j * (a[i + 1] - a[i]);up(f[x ^ 1][j + 1][cnt], f[x][j][k]);up(f[x ^ 1][j][cnt], f[x][j][k]);if (j){up(f[x ^ 1][j][cnt], f[x][j][k] * j % mod);up(f[x ^ 1][j - 1][cnt], f[x][j][k] * j % mod);}}}}ans = 0;rep(i, 0, m) up(ans, f[x ^ 1][0][i]);  printf("%lld\n", ans);return 0;
}

  

转载于:https://www.cnblogs.com/cxhscst2/p/8578369.html

Codeforces 626F Group Projects (DP)相关推荐

  1. codeforces 711C Coloring Trees(DP)

    题目链接:http://codeforces.com/problemset/problem/711/C O(n^4)的复杂度,以为会超时的 思路:dp[i][j][k]表示第i棵数用颜色k涂完后bea ...

  2. Codeforces 803E--Roma and Poker (DP)

    原题链接:http://codeforces.com/problemset/problem/803/E 题意:给一个n长度的字符串,其中'?'可以替换成'D'.'W'.'L'中的任意一种,'D'等价于 ...

  3. CodeForces - 835D Palindromic characteristics (dp)

    题目链接:http://codeforces.com/problemset/problem/835/D点击打开链接 D. Palindromic characteristics time limit ...

  4. CodeForces 176B Word Cut(DP)

    题意:给你a串和b串,你能切k次,每次切完将尾部分放在头的前面,问有多少种方案切k次从a串变为b串 思路:令dp[i][0]为砍了i次变成b串的方案数,dp[i][1]为砍了i次变成非b串的方案数,然 ...

  5. CodeForces 14 E.Camels(dp)

    Description 构造序列y1,...,ny_{1,...,n}满足: 1.有tt个j(2≤j≤n−1)j(2\leq j\leq n-1)满足yj−1<yj>yj+1y_{j-1} ...

  6. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  7. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  8. LeetCode 1220. 统计元音字母序列的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...

  9. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

最新文章

  1. Enterprise Library 2.0 -- Caching Application Block
  2. operator new和operator delete
  3. 马婕 2014MBA专硕考试 报刊选读 6(转)
  4. KeyMob应用开发者服务平台帮助开发者推广和盈利
  5. Java Persistence with MyBatis 小结2
  6. oracle数据库笔记---pl/sql的基础使用方法
  7. C++对象模型:单继承,多继承,虚继承
  8. Flutter进阶—实现动画效果(五)
  9. 沙场白帽老兵聊未来的挖洞方向及其它
  10. Introduction to CALayers Tutorial
  11. Oracle 触发器详解
  12. 第五章 基于时序差分和Q学习的无模型预测与控制-强化学习理论学习与代码实现(强化学习导论第二版)
  13. vs2010专业板产品密钥
  14. 自动点击android按钮,Android实现自动点击无障碍服务功能的实例代码
  15. java406错误_Java项目部署遇到406错误
  16. CCC与Android交互的注意点
  17. 鸿蒙系统翻车了,鸿蒙系统翻车了?任正非承认忽视了关键问题,称华为犯下大错误...
  18. ultravnc使用,ultravnc如何进行使用
  19. 使用cython加速代码运行
  20. 前端基础 互联网 DNS 服务器 浏览器

热门文章

  1. mysql数据库version版本控制_MySQL数据库版本控制
  2. word公式插件_再也不用担心我的公式写不出来了:一款公式输入神器实测
  3. java crud事件回调_java回调机制 - 神是到着念的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. arduino i2c 如何写16位寄存器_arduino入门
  5. oracle导数卡死,oracle-审计导数
  6. 新型发明创造大赛计算机类,2017年发明杯全国高职高专大学生创新创业大赛
  7. 多个数字数组_七个问题帮助初学者深入理解Java数组
  8. nginx post请求超时_nginx记录分析网站响应慢的请求(ngx_http_log_request_speed)
  9. 将gcc/g++链接到指定版本
  10. 小学计算机教学教师培训,例谈小学信息技术课堂的有效教学