首页 > 其他分享 >数位dp—卡尔文锦标赛

数位dp—卡尔文锦标赛

时间:2023-11-15 10:01:14浏览次数:28  
标签:卡尔文 texttt 选手 000 球队 编号 define dp 数位

[CEOI2015 Day1] 卡尔文球锦标赛

题目描述

译自 CEOI2015 Day1 T2「Calvinball championship

一场卡尔文球比赛会有 $n$ 名选手参与,他们的编号分别为 $1\dots n$,分为若干个非空的球队。我们规定球队之间按照每个球队编号最小的选手的编号排序,并且以从 1 开始的连续整数编号。

举个栗子,譬如 1 号选手自己成一队,2, 3 和 5 号选手成一队,4 和 6 号选手成一队。

> $\ \texttt{1}$
> $\ \texttt{2 3 5}$
> $\ \texttt{4 6}$

那么 1 号选手的球队就是 1 号球队,2 号选手的球队就是 2 号球队,4 号选手的球队就是 3 号球队。

> $\ \texttt{1|1}$
> $\ \texttt{2|2 3 5}$
> $\ \texttt{3|4 6}$

每个人每天会选择不同的球队,我们可以在记录时省略选手的编号,仅记录每个位置对应选手所属球队编号的序列(上述例子为 1 2 2 3 2 3),因为每天的选手是一样的。当可能的选择方案全部被使用过后,锦标赛就结束了。

由于选择方案十分多,选择困难症患者纷纷表示力不从心。今年,我们决定根据记录的序列的字典序来选择方案。因此,第一天,所有人都在一个队 1 1 1 1 1;第二天,所有人都与 6 号针锋相对 1 1 1 1 1 2……在最后一天,所有人互相打响战争 1 2 3 4 5 6

对于给定的球队记录,请你算出将会在未来的哪一天使用该记录。输出这个数字对 $1\ 000\ 007$ 取余的结果。

输入格式

第一行,一个正整数 $n(1 \leq n \leq 10\ 000)$。

第二行,$n$ 个以空格分隔的正整数,表示任务所给的球队记录。

输出格式

输出一个正整数,表示任务所给的球队记录将会被使用的天数对 $1\ 000\ 007$ 取余的结果。第一天的天数为 1。

样例 #1

样例输入 #1

3
1 2 2

样例输出 #1

4

提示

请注意,三人比赛中可能的选择有 1 1 1 1 1 2 1 2 1 1 2 21 2 3

数据范围与提示

数据点 $1-3$ $4-5$ $6-7$ $8-10$
$n\le$ $14$ $100$ $1\ 000$ $10\ 000$

考虑数位dp.设f(i,j,0/1)表示前i位,最高数字为j,0表示与前i位不同,1表示与前i位相同的序列数。
f(i+1,j,0)+=f(i,j,0)j;
f(i+1.j+1,0)+=f(i,j,0);
f(i+1,j,0)+=f(i,j,1)
(a[i+1]-1);
a[i+1]==j+1?f(i+1,j+1,1):f(i+1,j,1)+=f(i,j,1)

#include<bits/stdc++.h>
#define int long long
#define b i&1^1
#define c i&1
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
using namespace std;
const int N=10005,p=1000007;

int f[2][N][2];
int a[N],s=1;

signed main(){
    int n;
    cin>>n;
    rep(i,1,n) cin>>a[i];
    f[1][1][1]=1;
    for(int i=1;i<n;i++)
        for(int j=1;j<=i;j++){
            f[c][j][0]%=p,f[c][j][1]%=p;
            f[b][j][0]+=f[c][j][0]*j;
            f[b][j+1][0]+=f[c][j][0];
            f[b][j][0]+=f[c][j][1]*(a[i+1]-1);
            (a[i+1]==j+1?f[b][j+1][1]:f[b][j][1])+=f[c][j][1];
            f[c][j][0]=f[c][j][1]=0;
        }
    rep(j,1,n){
            int i=n;
            f[c][j][0]%=p;s+=f[c][j][0];
            s%=p;
        }
    cout<<s;
}

标签:卡尔文,texttt,选手,000,球队,编号,define,dp,数位
From: https://www.cnblogs.com/Kopicy/p/17833206.html

相关文章

  • 2.6 Windows驱动开发:使用IO与DPC定时器
    本章将继续探索驱动开发中的基础部分,定时器在内核中同样很常用,在内核中定时器可以使用两种,即IO定时器,以及DPC定时器,一般来说IO定时器是DDK中提供的一种,该定时器可以为间隔为N秒做定时,但如果要实现毫秒级别间隔,微秒级别间隔,就需要用到DPC定时器,如果是秒级定时其两者基本上无任何差......
  • DPDK-Pktgen Ubuntu 安装与使用
    原文链接:DPDK-PktgenUbuntu安装与使用系统及DPDK版本:系统:Ubuntu2204DPDK:21.11.1Pktgen-DPDK:22.04.1关于DPDK,其实Ubuntu的软件源中就已经包含了最新的Stable版本的DPDK,如果不想自己编译的话,直接 aptinstalldpdk 也是可以的(甚至更方便)。安装编译依赖:sudoaptinsta......
  • mysql5.7安装插件udp(lib_mysqludf_sys)
    项目应用中需要用mysql执行一下命令行.几经搜索可以安装lib_mysqludf_sys插件可以实现本地window环境安装(mysql8.0,64位,使用lib_mysqludf_sys.dll文件)--查看环境中插件目录showvariableslike'%plugin%';--plugin_dir C:/mysql/lib/plugin/--将lib_mysqludf_sys......
  • 从DPlayer说起,有哪些开源的H5播放器
    引言​ H5指的是HTML5,也就是介绍网页播放器(只是列出而已)。首先我不是什么大佬,并没有完全体验过以下我会介绍的全部播放器;其次,因为我水平比较低,主要介绍拥有中文文档的播放器,不了解开发的朋友当成科普看看就行,平常用不到,了解的可以补充一下还有哪些,毕竟我收集的肯定不全,最好能补......
  • WordPress主题 JustNews主题6.0.1(亲测首页不空白)
    介绍资源入口需要用WordPress5.X版本JustNews介绍:一款专为博客、自媒体、资讯类的网站设计开发的WordPress主题,自v3.0版开始支持自主研发的前端用户中心,不仅支持注册、登录、账户设置、个人中心等常用页面的添加,还可以上传头像、设置用户分组等等!更新介绍JustNews主题更新......
  • 棋盘DP
    主要是在棋盘上的DP,棋盘上每个点的转移状态基本上都是已知的//https://www.luogu.com.cn/problem/P1004//首先提供二维dp,二维dp的思路为ij表示i行j列时的可以取得最大值//类似于贪心,先进行第一遍循环,取到最优,然后把第一遍取的数全变为0,再进行第二遍的取//但是这种方法......
  • wordpress SQL
     UPDATEwp_postsSETpost_content=REPLACE(post_content,"192.168.120.126:8000","计算机名:8000")  WHEREid=10 ;   修改ip地址后,导致图片失效 报语法错,跟mysql版本没有关系。   更改ip和切换主题都会导致文章排版和图片问题。有些主题是用markdown,有......
  • ubuntu:dpkg操作deb包(23.10)
    一,查看某个文件所属的deb包:root@lhdpc:/usr/local/source/Python-3.12.0#dpkg-S/usr/bin/python3python3-minimal:/usr/bin/python3二,查看dpkg的版本号root@lhdpc:/usr/local/source/Python-3.12.0#dpkg--versionDebiandpkg软件包管理程序1.22.0(amd64)版。......
  • 如何给 Spartacus 的 CSR 和 SSR 配置不同的 OCC endpoint
    SAP官方文档里,对CommerceCloudComposableStorefront的occendpoint配置说明的例子如下:provideConfig(backend:{occ:{baseUrl:'https://some.baseUrl.com'},},}),那么如果想为SSR和CSR两种运行方式,配置不同的o......
  • 浅谈斜率优化DP
    前言考试T2出题人放了个树上斜率优化DP,直接被同校OIER吊起来锤。离NOIP还有不到一周,赶紧学一点。引入斜率斜率,数学、几何学名词,是表示一条直线(或曲线的切线)关于(横)坐标轴倾斜程度的量。它通常用直线(或曲线的切线)与(横)坐标轴夹角的正切,或两点的纵坐标之差与横坐标之差的......