BZOJ 4584 [Apio2016]赛艇 ——动态规划

Subtask 1

直接$N^2$ $DP$,就可以了

Subtask 2

用$f[i][j]$表示当前位置为$i$,结束元素为$j$的方案数。

Subtask 3

看下面

Subtask 4

首先可以枚举一段序列选择同一个重叠的区间,然后一些可以不选,如果选的话要求上升。

然后很容易得到方程,离散化之后就可以$N^4$直接做了。

然后并不会优化,看了题解。

想了想写不出来。

抄代码啦!

#include <map>
#include <ctime>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define maxn 505
#define md 1000000007

int n,b[maxn],a[maxn],siz[maxn],ls[maxn*2],top,ans=0,inv[maxn];
int l[maxn],r[maxn],C[maxn],g[maxn],fac[maxn],inv_fac[maxn];

int ksm(int a,int b,int p)
{int ret=1;for(;b;a=(ll)a*a%p,b>>=1)if(b&1)ret=(ll)ret*a%md;return ret;}

int main()
{
    scanf("%d",&n);fac[0]=1;F(i,1,maxn-1)fac[i]=(ll)fac[i-1]*i%md;
    inv_fac[0]=1;inv_fac[1]=1;F(i,2,maxn-1) inv_fac[i]=ksm(fac[i],md-2,md);
    F(i,1,maxn-1) inv[i]=ksm(i,md-2,md);
    F(i,1,n) scanf("%d%d",&a[i],&b[i]),ls[++top]=a[i],ls[++top]=b[i]+1;
    sort(ls+1,ls+top+1); top=unique(ls+1,ls+top+1)-ls-1;
    F(i,1,n)
    {
        l[i]=lower_bound(ls+1,ls+top+1,a[i])-ls;
        r[i]=lower_bound(ls+1,ls+top+1,b[i]+1)-ls;
    }
    g[0]=1;C[0]=1;
    for (int j=1;j<top;++j)
    {
        int L=ls[j+1]-ls[j];
        for (int i=1;i<=n;++i) C[i]=(ll)C[i-1]*(L+i-1)%md*inv[i]%md;
        for (int i=n;i>=1;--i)
        {
            if (l[i]<=j&&j+1<=r[i])
            {
                int f=0,m=1,c=L;
                for (int p=i-1;p>=0;--p)
                {
                    f=(f+(ll)c*g[p]%md)%md;
                    if (l[p]<=j&&j+1<=r[p]) c=C[++m];
                }
                g[i]=(g[i]+f)%md;
            }
        }
    }
    F(i,1,n) ans=(ans+g[i])%md;
    printf("%d\n",ans);
}

  

时间: 2024-10-22 09:03:19

BZOJ 4584 [Apio2016]赛艇 ——动态规划的相关文章

BZOJ 4584 【APIO2016】 赛艇

题目链接:赛艇 讲道理好好的Boat为啥要翻译成赛艇呢--题面中不也是划艇么-- 这道题考虑一下dp.由于划艇数量过于庞大,所以肯定不能直接记录到dp状态中.所以一个想法就是把数量离散化,然后把每个学校的数量在哪一段内记录下来.也就是说\(f_{i,j,k}\)表示前\(i\)个学校,第\(i\)所学校派出的划艇数量在区间\(j\)内,并且区间\(j\)内共有\(k\)个学校的方案数.然后分类讨论一下转移: 当\(k\ne 1\)时,有: \begin{aligned}f_{i,j,k} &=\

bzoj 4767 两双手 - 动态规划 - 容斥原理

题目传送门 传送门I 传送门II 题目大意 一个无限大的棋盘上有一只马,设马在某个时刻的位置为$(x, y)$, 每次移动可以将马移动到$(x + A_x, y + A_y)$或者$(x + B_x, y + B_y)$.棋盘上有$n$个禁止位置不能经过,问马从$(0, 0)$走到$(E_x, E_y)$的方案数. 容斥是显然的. 每确定经过$k$个禁止位置的方案数的容斥系数是$(-1)^{k}$. 考虑带上容斥系数来动态规划, 注意到去掉重复的禁止位置后,$(0, 0), (E_x, E_y)

bzoj 4008 亚瑟王 - 动态规划 - 概率与期望

Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一个看脸的游戏,技能的发动都是看概率的.作为一个非 洲人,同时作为一个前 OIer,小 K 自然是希望最大化造成伤害的期望值.但他已 经多年没写过代码,连 Spaly都敲不对了,因此,希望你能帮帮小 K,让他感受一 下当欧洲人是怎样的体验. 本题中我们将考虑游戏的一个简化版模型. 玩家有一套卡牌,共

bzoj 3670 动物园 - kmp - 动态规划

Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法. 某天,园长给动物们讲解KMP算法. 园长:“对于一个字符串S,它的长度为L.我们可以在O(L)的时间内,求出一个名为next的数组.有谁预习了next数组的含义吗?” 熊猫:“对于字符串S的前i个字符构成的子串,既是它的后缀又是它的前缀的字符串中(它本身除外),最长的长度记作next[i].

【BZOJ】2655: calc 动态规划+拉格朗日插值

[题意]一个序列$a_1,...,a_n$合法当且仅当它们都是[1,A]中的数字且互不相同,一个序列的价值定义为数字的乘积,求所有序列的价值和.n<=500,A<=10^9,n+1<A<mod<=10^9,mod是素数. [算法]动态规划+拉格朗日插值 [题解]这道题每个数字的贡献和序列选了的数字积关系密切,所以不能从序列角度考虑(和具体数字关系不大). 设$f_{n,m}$表示前n个数字(值域)中取m个数字的答案,那么枚举取或不取数字n,取n时乘n且有j个位置可以插入,即:

[BZOJ4584][Apio2016]赛艇

试题描述 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着个划艇学校,编号依次为到.每个学校都拥有若干艘划艇.同一所学校的所有划艇颜色相同,不同的学校的划艇颜色互不相同.颜色相同的划艇被认为是一样的.每个学校可以选择派出一些划艇参加节日的庆典,也可以选择不派出任何划艇参加.如果编号为的学校选择派出划艇参加庆典,那么,派出的划艇数量可以在Ai至Bi之间任意选择(Ai<=Bi).值得注意的是,编号为i的学校如果选择派出划艇参加庆典,那么它派出的划艇数量必须大于任意一所编号小于它的学校

BZOJ 3197 Sdoi2013 assassin 动态规划+树同构+费用流

题目大意:给定一棵树和两组权值,求第一组权值最少改变多少个之后这棵树经过重标号之后与第二组权值相同 这个题做法很神- - 首先和3162一样的处理方式 我们先找到这棵树的重心作为根 如果重心有两个就新建一个根连向这两个重心 令f[x][y]表示x所在子树的第一组权值和y所在子树的第二组权值匹配的最小花销 转移的必要条件是x所在的子树与y所在的子树同构且x与y深度相同 为了保证无后效性,x的所有子节点与y的所有子节点之间的最小花销必须都已求出 那么我们将节点以深度的倒数为第一键值,Hash值为第二

【题解】亚瑟王 HNOI 2015 BZOJ 4008 概率 期望 动态规划

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4008 一道不简单的概率和期望dp题 根据期望的线性性质,容易想到,可以算出每张卡的期望伤害,然后全部加在一起 手算样例之后发现是正确的,那么我们只要求出每张卡的实际被使用的概率就可以了 记第$i$张卡的实际被使用的概率为$fp[i]$ 那么答案就是 $\Large\sum\limits_{i=0}^{n-1}fp[i]\cdot d[i]$ 如何求出$fp[i]$? 首先考虑第一张卡的$f

BZOJ 1003 物流运输 (动态规划 SPFA 最短路)

1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 5590 Solved: 2293 [Submit][Status][Discuss] Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完. 货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线, 以便对整个运输过程实施严格的管理和跟踪.由于各种因素的存在,有的时候某个 码头会无法装卸货物.这