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

  1. nodejs api 中文文档

    文档首页 英文版文档 本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可. Node.js v0.10.18 手册 & 文档 索引 | 在单一页面中浏览 | JSON格 ...

  2. C#中Length和Count的区别(个人观点)

    这篇文章将会很短...短到比你的JJ还短,当然开玩笑了.网上有说过Length和count的区别,都是很含糊的,我没有发现有 文章说得比较透彻的,所以,虽然这篇文章很短,我还是希望能留在首页,听听大家 ...

  3. [PHP源码阅读]count函数

    在PHP编程中,在遍历数组的时候经常需要先计算数组的长度作为循环结束的判断条件,而在PHP里面对数组的操作是很频繁的,因此count也算是一个常用函数,下面研究一下count函数的具体实现. 我在gi ...

  4. EntityFramework.Extended 实现 update count+=1

    在使用 EF 的时候,EntityFramework.Extended 的作用:使IQueryable<T>转换为update table set ...,这样使我们在修改实体对象的时候, ...

  5. 学习笔记 MYSQL报错注入(count()、rand()、group by)

    首先看下常见的攻击载荷,如下: select count(*),(floor(rand(0)*2))x from table group by x; 然后对于攻击载荷进行解释, floor(rand( ...

  6. count(*) 与count (字段名)的区别

    count(*) 查出来的是:结果集的总条数 count(字段名) 查出来的是: 结果集中'字段名'不为空的记录的总条数

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

  8. [LeetCode] Count Numbers with Unique Digits 计算各位不相同的数字个数

    Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. Examp ...

  9. [LeetCode] Count of Range Sum 区间和计数

    Given an integer array nums, return the number of range sums that lie in [lower, upper] inclusive.Ra ...

随机推荐

  1. 2017NOIP初赛游记

    前天晚上,玩三国杀,玩到了昨天凌晨2点40多分吧,我觉得初赛要爆炸了, 不得不吐槽一下,三国杀的武将太少了. 昨天是初赛的日子,上午8点多来了后看了看阅读程序和程序填空,复习了以下理论知识和wsj 然 ...

  2. 费用流(bzoj 3130)

    Description Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识.    最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络 ...

  3. toolbarlite随笔之插件的闭包写法

    toolbarlite这个东西至今没搞懂是什么玩意.因为除了源代码我实在是找不到除了toolbar之外的任何关于toolbarlite的东西了.不知道toolbarlite是不是toolbar的子集, ...

  4. ftrace笔记

    mount -t debugfs nodev /sys/kernel/debug 在mount后,可以在debug目录下看到tracing目录,该目录包含了ftrace的控制与输出文件. (1) en ...

  5. 用GDB远程调试android native程序

    上次写了几个native程序,想着如何调试,经过一阵子搜索和测试,终于完成了.有几个关键点: 1 gdb和gdbserver 因为这两个需要配套,建议使用同一个ndk下面的gdb和gdbserver ...

  6. Laravel 视图中的url

    <a href="{{ url('url') }}">url</a> <a href="{{ action('StudentControll ...

  7. Neo4j 第七篇:模式(Pattern)

    模式和模式匹配是Cypher的核心,使用模式来描述所需数据的形状,该模式使用属性图的结构来描述,通常使用小括号()表示节点,-->表示关系,-[]->表示关系和关系的类型,箭头表示关系的方 ...

  8. OO第三单元作业小结

    一.JML理论基础及应用工具链情况 理论基础 1.JML表达式 \result:表示方法执行后的返回值. \old(expr):表示一个表达式expr在相应方法执行前的取值. \foall:全称量词修 ...

  9. NIO与传统IO的区别(形象比喻)[转]

    传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大.使用NIO,不再需要为每个线程创建单独的线程,可以用一个含有限数 ...

  10. 修复OS X的Finder中文档 打开方式中重复程序的问题

    如上图,OS X在使用一段时间后,有些软件就会重复注册打开方式,对于有洁癖的人,这是难以接受的事. 不过有个命令可以很简单的把重复项给去掉. /System/Library/Frameworks/Co ...