[APIO2016]划艇-程序员宅基地

[APIO2016]划艇 

总共只有2*n段。分段进行DP

简单的方法是:

外层枚举段数j,f[i]表示,当前枚举到j的时候,以(i,j)结尾(必须选择(i,j))的方案数,枚举一个f(p,1~j-1)进行转移

连续一段j区间,有包括i一共有m个可以选择的学校,那么这里贡献的方案数就是:∑(1<=i<=m)C(len,i)*C(m-1,i)=C(l+m-1,m)等式考虑用网格图走来证明

C可以预处理

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){
    char ch;x=0;bool fl=false;
    while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
    for(x=numb;isdigit(ch=getchar());x=x*10+numb);
    (fl==true)&&(x=-x);
}
template<class T>il void output(T x){
    if(x/10)output(x/10);putchar(x%10+'0');}
template<class T>il void ot(T x){
    if(x<0) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){
    for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}

namespace Miracle{
const int N=1003;
const int mod=1e9+7;
int n;
int lo[N],hi[N],c[2*N],cnt;
int C[N];
int ad(int x,int y){
    return x+y>=mod?x+y-mod:x+y;
}
int mul(int x,int y){
    return (ll)x*y%mod;
}
int g[N];
int inv[N];
int main(){
    rd(n);
    inv[1]=1;
    for(reg i=2;i<=n;++i){
        inv[i]=mul(mod-mod/i,inv[mod%i]);
    }
    for(reg i=1;i<=n;++i){
        rd(lo[i]);rd(hi[i]);
        c[++cnt]=lo[i];c[++cnt]=hi[i]+1;
    }
    sort(c+1,c+cnt+1);
    cnt=unique(c+1,c+cnt+1)-c-1;
    for(reg i=1;i<=n;++i){
        lo[i]=lower_bound(c+1,c+cnt+1,lo[i])-c;
        hi[i]=lower_bound(c+1,c+cnt+1,hi[i]+1)-c;
    }
    g[0]=1;C[0]=1;
    // cout<<" cnt "<<cnt<<endl;
    // prt(lo,1,n);
    // prt(hi,1,n);
    for(reg j=1;j<cnt;++j){
        int len=c[j+1]-c[j];
        // cout<<" len "<<len<<" in "<<j<<endl;
        C[0]=len;
        for(reg i=1;i<=n;++i) C[i]=mul(C[i-1],mul(len+i,inv[i+1]));
        // cout<<" C ";prt(C,0,n);
        for(reg i=n;i>=1;--i){
            if(lo[i]<=j&&j<hi[i]){
                int f=0,m=0;
                for(reg p=i-1;p>=0;--p){
                    f=ad(f,mul(C[m],g[p]));
                    if(lo[p]<=j&&j<hi[p]) ++m;
                }
                g[i]=ad(g[i],f);
                // cout<<" con "<<i<<" "<<f<<endl;
            }
        }
        // cout<<"gg "<<endl;
        // prt(g,1,n);
    }
    int ans=0;
    for(reg i=1;i<=n;++i) ans=ad(ans,g[i]);
    ot(ans);return 0;
}

}
signed main(){
    Miracle::main();
    return 0;
}

/*
   Author: *Miracle*
*/

 

转载于:https://www.cnblogs.com/Miracevin/p/10777929.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34101784/article/details/93717885

智能推荐

ActionScript 类库总结-程序员宅基地

http://wiki.junnan.org/pages/development-design/actionscript.htmlUtility ClassTweenerTweening Platformtween24 – 一位日本人写的tween库TweenerAudioas3soundeditorlibASAudio – 小巧的声音处理库So

Git使用-Windows优化Git使用以及设置默认编辑器_git用哪个默认编辑器比较好-程序员宅基地

1.优化使用体验先放上刚安装Git后命令行的样子,没有auto completion功能,且提示符不够友好更改后是这样:( 命令提示符变成了@用户名(@当前所在的分支@当前未被提交的修改数量)@所在路径 )这样是不是看起来更加简洁与方便:可以随时知道自己目前checkout的位置以及未被提交的修改数量按Tab键可以实现auto completion/自动填写是不是看起来更加友好..._git用哪个默认编辑器比较好

ios的内购功能_ios集成苹果内购需要适配证书吗-程序员宅基地

iOS开发内购详细版本说明 优雅地小男子 关注2017.02.23 11:08* 字数 877 阅读 8023评论 46喜欢 26一、最近公司很多的项目用到了内购,抽空整理下内购的详细内容吧。1、先从内购的iTunesConnect里配置说起吧,我们先进入苹果的iTunesConnect链接https://itunesconnect.appl_ios集成苹果内购需要适配证书吗

python数学建模(四)微分方程模型_sp.dsolve-程序员宅基地

(一)求微分方程(方程组)的符号解Sympy 库提供了 dsolve 函数求微分方程的符号解。在声明时可以使用Function 函数将符号变量声明为函数类型。如下:y = Function('y')或y = symbols(‘y’, cls=Function)例一:求微分方程的通解(1)齐次方程:∂2y∂x2−5∂y∂x+6y=0;\frac{\partial^2 y}{\partial x^2}-5\frac{\partial y}{\partial x}+6y =0;∂x2∂2y​−5∂x_sp.dsolve

积性函数的性质及证明 + 线性筛_积性函数逆元-程序员宅基地

引言在数论问题中,积性函数有着广泛的应用。 如在莫比乌斯反演问题中,函数变换之后如何快速维护前缀和往往是最重要也是最难的一步。如果维护的函数具有积性,那就可以尝试利用线性筛在O(n)O(n)的时限内完成预处理,从而达到优化复杂度的神奇作用。 本文的大部分相关性质及公式来自: 《线性筛与积性函数》−贾志鹏《线性筛与积性函数》- 贾志鹏 博主将试着证明其中的性质公式,严谨性可能欠缺,其目的主要是_积性函数逆元

flink jdbc分库分表_flinksql scan.partition.lower-bound-程序员宅基地

flink jdbc分库分表_flinksql scan.partition.lower-bound

随便推点

Writing Efficient Testbenches-程序员宅基地

编写高效的测试设计(test benches)原文作者:Mujtaba Hamid注:一个设计的测试验证是非常重要的。有效的测试可以助我们快速的完成或改善设计。Testbenches建议编写有效的测试代码来通过软件实现可靠的验证。无意中发现,顺手译为中文,以备将来方便。也贴给没有找到更好中文版本的同道人。Testbenches本意应该是测试平台更合理,但是在中文中阅读起来很不舒服。所以本文中有时译

Jupyter的ipynb文件转为python(.py)文件_jupyter转python-程序员宅基地

如果不想在jupyter写代码,可以转到Python 环境或者IDE下,jupyter提供了这个转换功能,很简单: File—>Download as—>python(.py)然后就可以生成Python文件了。_jupyter转python

常见排序算法的稳定性_所有简单排序都是稳定的吗-程序员宅基地

常见排序算法的稳定性编辑堆排序、快速排序、希尔排序、直接选择排序是不稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj, Ai原来在位置前,排序后Ai还是要在Aj位置前。其次..._所有简单排序都是稳定的吗

实例027 Shadows基类的属性与方法_public shadows sub ()-程序员宅基地

除了在子类中覆盖定义基类中的可覆盖属性或方法外,还可以在子类中使用Shadows关键字来隐藏基类中已经定义过并被子类继承下来的各种字段、属性或方法,并在子类中重新定义同名的字段、属性或者方法。属性或方法隐藏形式如下: Public Shadows Property 属性名 As 数据类型 Public Shadows Sub 过程名 Public Shadows F..._public shadows sub ()

混合部署环境本地邮件被云端传输规则当成外部邮件处理-程序员宅基地

最近,我们遇到一个Hybrid环境中,来自本地的邮件被云端传输规则当作外部邮件处理的问题,下面将分析过程分享给大家。环境:本地Exchange Server 2013;Exchange Online E3问题:管理员在Exchange Online中创建了一条传输规则,在来自组织外的邮件上都添加一条免责声明,如下图:之后,有云端用户报告,收到本地用户发来的邮件,也被应用了这条规则。接到这个问题..._x-ms-exchange-organization-authsource