DP的序--Codeforces626F. Group Projects
$n \leq 200$个数,$ \leq 500$,$K \leq 1000$代价内的数字分组有多少?一个分组的代价是分成的每个小组的总代价;一个小组的代价是极差。
问的极差那就从极入手嘛。一个小组只有最大和最小值是有用滴!那就来分这些最大最小值。
由于考虑大小,不如先把数列排个序。这样的话,可以表示出那种“有几个小组分不满”的形似插头DP的状态,在移动到下一个数时代价加上当前数和下一个数的差乘上还没分配满的小组数即可。具体,$f(i,j,k)$表示前$i$个数$j$个小组还没满,当前代价$k$的方案,如此不需要知道最小值们是谁,只需在$i$移动到$i+1$时,每个没配满的小组加上$a_{i+1}-a_i$的代价即可,因此没配满小组数$j$就可以计算代价。转移的话,分$i$单独一组、新开一个未满组、加入之前一个未满组、充当之前一个未满组的最大值,来转移。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//#include<math.h>
//#include<queue>
//#include<vector>
#include<algorithm>
//#include<iostream>
//#include<assert.h>
using namespace std; int n,K;
const int mod=1e9+;
int a[],f[][][],cur; int main()
{
scanf("%d%d",&n,&K);
for (int i=;i<=n;i++) scanf("%d",&a[i]); sort(a+,a++n);
cur=; f[][][]=;
for (int i=;i<=n;i++)
{
for (int j=;j<=n;j++)
for (int k=,tmp=j*(a[i]-a[i-]),to=K-tmp;k<=to;k++,tmp++) if (f[cur][j][k])
{
f[cur^][j+][tmp]+=f[cur][j][k]; f[cur^][j+][tmp]-=f[cur^][j+][tmp]>=mod?mod:;
f[cur^][j][tmp]+=(j+)*1ll*f[cur][j][k]%mod; f[cur^][j][tmp]-=f[cur^][j][tmp]>=mod?mod:;
if (j>)
{f[cur^][j-][tmp]+=j*1ll*f[cur][j][k]%mod; f[cur^][j-][tmp]-=f[cur^][j-][tmp]>=mod?mod:;}
}
memset(f[cur],,sizeof(f[cur]));
cur^=;
} int ans=; for (int i=;i<=K;i++) ans+=f[cur][][i],ans-=ans>=mod?mod:;
printf("%d\n",ans);
return ;
}
DP的序--Codeforces626F. Group Projects的更多相关文章
- [Codeforces626F] Group Projects (DP)
Group Projects Description There are n students in a class working on group projects. The students w ...
- 8VC Venture Cup 2016 - Elimination Round F - Group Projects dp好题
F - Group Projects 题目大意:给你n个物品, 每个物品有个权值ai, 把它们分成若干组, 总消耗为每组里的最大值减最小值之和. 问你一共有多少种分组方法. 思路:感觉刚看到的时候的想 ...
- Codeforces 626F Group Projects(滚动数组+差分dp)
F. Group Projects time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...
- 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 ...
- 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 ...
- 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序
[题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...
- 【CodeForces】626 F. Group Projects 动态规划
[题目]F. Group Projects [题意]给定k和n个数字ai,要求分成若干集合使得每个集合内部极差的总和不超过k的方案数.n<=200,m<=1000,1<=ai< ...
- [CF626F]Group Projects
[CF626F]Group Projects 题目大意: 有一个长度为\(n(n\le200)\)的数列\(\{A_i\}\),将其划分成若干个子集,每个子集贡献为子集\(\max-\min\).求子 ...
- HDU 5293 Annoying problem 树形dp dfs序 树状数组 lca
Annoying problem 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 Description Coco has a tree, w ...
随机推荐
- 一个典型的flex布局,兼容性比较好
html 代码: <body class="flex-wrap col-flex"> <header class="midCenter flex-wra ...
- javascript单元测试框架mochajs详解(转载)
章节目录 关于单元测试的想法 mocha单元测试框架简介 安装mocha 一个简单的例子 mocha支持的断言模块 同步代码测试 异步代码测试 promise代码测试 不建议使用箭头函数 钩子函数 钩 ...
- Bootstrap CSS概览
HTML5文档类型(<!DOCTYPE html>) Bootstrap前端框架使用了HTML5和CSS属性,为了让这些能正常工作,您需要使用HTML5文档类型(<!DOCTYPE ...
- Django2.x中url路由的path()与re_path()参数解释
在新版本Django2.x中,url的路由表示用path和re_path代替,模块的导入由django1.x版本的from django.conf.urls import url,include变成现 ...
- 【Java_多线程并发编程】JUC原子类——原子类中的volatile变量和CAS函数
JUC中的原子类是依靠volatile变量和Unsafe类中的CAS函数实现的. 1. volatile变量的特性 内存可见性(当一个线程修改volatile变量的值后,另一个线程就可以实时看到此变量 ...
- nginx正则配置解释和fastadmin
参考:http://www.cnblogs.com/netsa/p/6383094.html 1 2 3 4 5 6 7 8 9 10 11 1.^: 匹配字符串的开始位置: 2. $:匹配字符串 ...
- 009 CSS选择器
CSS选择器 一.基础选择器 1.通配选择器 * { border: solid; } 匹配文档中所有标签:通常指html.body及body中所有显示类的标签 2.标签选择器 div { backg ...
- $monitor用法
1.$monitor 进程同一时间有且仅有一个,若多次调用$monitor,新进程会代替以前的monitor进程. 2.$fmonitor可以同时存在任意个. 3.一般不用$monitor系统函数. ...
- eclipse去除js(JavaScript)验证错误
第一步: 去除eclipse的JS验证: 将windows->preference->Java Script->Validator->Errors/Warnings-> ...
- HTML、CSS知识点总结_D
一,html+css基础 1-1 Html和CSS的关系 学习web前端开发基础技术需要掌握:HTML.CSS.JavaScript语言.下面我们就来了解下这三门技术都是用来实现什么的: 1. HTM ...