$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的更多相关文章

  1. [Codeforces626F] Group Projects (DP)

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

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

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

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

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

  4. 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 ...

  5. 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 ...

  6. 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序

    [题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...

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

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

  8. [CF626F]Group Projects

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

  9. HDU 5293 Annoying problem 树形dp dfs序 树状数组 lca

    Annoying problem 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 Description Coco has a tree, w ...

随机推荐

  1. HTTPs与HTTP的性能

    (参考:https://blog.csdn.net/chinafire525/article/details/78911734 https://blog.csdn.net/hherima/articl ...

  2. html页面编码问题

    今天在项目中碰到需要把已经编码的html页面通过mvc controller返回到前端页面,已编码的html页面包含类似下面的内容: <div style="line-height: ...

  3. ImportError: No module named flask.ext.wtf 解决方法

    install pip install flask.ext.wtf

  4. wxwidgets编译及环境配置

    wxwidgets编译及环境配置 安装步骤: 到www.CodeBlocks.org下载并安装CodeBlocks,最好下载MinGW版本的,可以省掉安装和配置GCC的麻烦. 到www.wxWidge ...

  5. 如何 Scale Up/Down Deployment?【转】

    伸缩(Scale Up/Down)是指在线增加或减少 Pod 的副本数.Deployment nginx-deployment 初始是两个副本. k8s-node1 和 k8s-node2 上各跑了一 ...

  6. Java数据结构和算法(五)--希尔排序和快速排序

    在前面复习了三个简单排序Java数据结构和算法(三)--三大排序--冒泡.选择.插入排序,属于算法的基础,但是效率是偏低的,所以现在 学习高级排序 插入排序存在的问题: 插入排序在逻辑把数据分为两部分 ...

  7. crop层

    A是要进行剪裁的blob,B是参考,C是由A剪裁出来的输出. 模式1和模式2不同在于offset,模式1中每个dimension可以不同,模式2中用一个值表示了所有dimension的值. axis表 ...

  8. Python字符编码及字符串

    字符编码 字符串是一种数据类型,但是字符串比较特殊的是编码问题,计算机只能处理数字,处理文本就需要将文本转换成数字. 计算机设计时8bit作为一个字节byte,一个字节能表示的最大整数就是(2^8)- ...

  9. struct结构体内存大小

    一. 基本原则 1. struct中成员变量的声明顺序,与成员变量对应的内存顺序是一致的: 2. struct本身的起始存储地址必须是成员变量中最长的数据类型的整倍数,注意是最长的数据类型,而不是最长 ...

  10. SQL 牛刀小试 1 —— 查询操作

    #创建数据库create database ST CHARACTER set utf8;#创建用户create user ST identified by '19980510';#授权用户操作该数据库 ...