bzoj4664: Count
是bzoj4498: 魔法的碰撞的哥哥题,我只写了一种
不一样的地方在于贡献有负数,第三维要保存的不能仅仅是0~L,这样空间会炸裂
考虑如何把贡献变成正的
假如要求最优解,那么一定是按顺序排,混乱度为hmax-hmin
反过来想,这启示我们hi-hj,可以用(hi - hi-1)+(hi-1 - hi-2)……(hj+1 - hj)表示出来
那么可以从小到大插入,每次插入给所有段的两端的点的贡献加上hi - hi-1
好妙啊
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const int _=1e2;
const int maxn=1e2+;
const int maxL=1e3+_;
const LL mod=1e9+; int h[maxn];
LL f[][maxn][maxL][];
int main()
{
// freopen("b.in","r",stdin);
// freopen("b.out","w",stdout);
int n,L;
scanf("%d%d",&n,&L);
if(n==){puts("");return ;}
for(int i=;i<=n;i++)scanf("%d",&h[i]);
sort(h+,h+n+);
if(h[n]-h[]>L){puts("");return ;} int now=;
f[now][][][]=;
f[now][][][]=;
for(int i=;i<n;i++)
{
memset(f[now^],,sizeof(f[now^]));
for(int j=;j<=i;j++)
for(int k=;k<=L;k++)
for(int p=;p<=;p++)
if(f[now][j][k][p])
{
int d=k+(h[i+]-h[i])*(*j-p);
if(d<=L)
{
f[now^][j+][d][p]=(f[now^][j+][d][p]+f[now][j][k][p]*(j-p+))%mod;
f[now^][j][d][p]=(f[now^][j][d][p]+f[now][j][k][p]*(*j-p))%mod;
if(j!=)f[now^][j-][d][p]=(f[now^][j-][d][p]+f[now][j][k][p]*(j-))%mod;
if(p!=)
{
f[now^][j+][d][p+]=(f[now^][j+][d][p+]+f[now][j][k][p]*(-p))%mod;
f[now^][j][d][p+]=(f[now^][j][d][p+]+f[now][j][k][p]*(-p))%mod;
}
}
}
now^=;
} LL ans=;
for(int i=;i<=L;i++)
ans=(ans+f[now][][i][])%mod;
printf("%lld\n",ans); return ;
}
bzoj4664: Count的更多相关文章
- nodejs api 中文文档
文档首页 英文版文档 本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可. Node.js v0.10.18 手册 & 文档 索引 | 在单一页面中浏览 | JSON格 ...
- C#中Length和Count的区别(个人观点)
这篇文章将会很短...短到比你的JJ还短,当然开玩笑了.网上有说过Length和count的区别,都是很含糊的,我没有发现有 文章说得比较透彻的,所以,虽然这篇文章很短,我还是希望能留在首页,听听大家 ...
- [PHP源码阅读]count函数
在PHP编程中,在遍历数组的时候经常需要先计算数组的长度作为循环结束的判断条件,而在PHP里面对数组的操作是很频繁的,因此count也算是一个常用函数,下面研究一下count函数的具体实现. 我在gi ...
- EntityFramework.Extended 实现 update count+=1
在使用 EF 的时候,EntityFramework.Extended 的作用:使IQueryable<T>转换为update table set ...,这样使我们在修改实体对象的时候, ...
- 学习笔记 MYSQL报错注入(count()、rand()、group by)
首先看下常见的攻击载荷,如下: select count(*),(floor(rand(0)*2))x from table group by x; 然后对于攻击载荷进行解释, floor(rand( ...
- count(*) 与count (字段名)的区别
count(*) 查出来的是:结果集的总条数 count(字段名) 查出来的是: 结果集中'字段名'不为空的记录的总条数
- BZOJ 2588: Spoj 10628. Count on a tree [树上主席树]
2588: Spoj 10628. Count on a tree Time Limit: 12 Sec Memory Limit: 128 MBSubmit: 5217 Solved: 1233 ...
- [LeetCode] Count Numbers with Unique Digits 计算各位不相同的数字个数
Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. Examp ...
- [LeetCode] Count of Range Sum 区间和计数
Given an integer array nums, return the number of range sums that lie in [lower, upper] inclusive.Ra ...
随机推荐
- IBM内存三技术:Chipkill、MPX、MM
转自:解析IBM内存三技术:Chipkill.MPX.MM 内存作为服务器中的又一个重要的组成部分,对于企业的应用起着十分重要的作用.如今,企业用户对于服务器的要求逐渐提升,使得在提高内存密度.增大内 ...
- vector容器中添加和删除元素
添加元素: 方法一: insert() 插入元素到Vector中 iterator insert( iterator loc, const TYPE &val ); //在指定位置loc前插入 ...
- LR(1)文法分析器 //c++ 实现
1.先读入终结符,非终结符,和所有产生式. 2.预处理:初始化:getpp()获得每个非终结符在产生式左边时的产生式编号, 记录在 string getp[]中(可以多个). 3.获得所有的符号的fi ...
- POJ 2125 最小点权覆盖集(输出方案)
题意:给一个图(有自回路,重边),要去掉所有边,规则:对某个点,可以有2种操作:去掉进入该点 的所有边,也可以去掉出该点所有边,(第一种代价为w+,第二种代价为w-).求最小代价去除所有边. 己思:点 ...
- T2832 6个朋友 codevs
http://codevs.cn/problem/2832/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有这么一种说法: ...
- linux find grep 查找命令
原文:fhqdddddd.blog.163.com/blog/static/186991542012417105729415/ find 1.作用 find命令的作用是在目录中搜索文件,它的使用权限是 ...
- 大整数类BIGN的设计与实现 C++高精度模板
首先感谢刘汝佳所著的<算法竞赛入门经典>. 众所周知,C++中储存能力最大的unsigned long long 也是有着一个上限,如果我们想计算非常大的整数时,就不知所措了,所以,我写了 ...
- scp、paramiko、rsync上传下载限流、限速、速度控制方法
1.scp限速 scp -l 800 a.txt user@ip:/home/admin/downloads 此时的传输速率就是800/8=100KB左右 man -a scp查看参数含义.注意单 ...
- linux 配置maven环境变量
vi /etc/profile 按照如下样例编辑环境变量. 编辑之后记得使用source /etc/profile命令是改动生效. 5.验证结果 在任意路径下执行mvn -version验证命令是否有 ...
- Ghost本地安装highlight.js使代码高亮
对于程序猿写博客来说,这代码高亮是起码的要求.可是Ghost本身没有支持高亮代码. 可是能够通过扩展来实现,它就是highlight.js--附官方站点,看了下首页介绍,真的非常强大,如今说说怎么进行 ...