原题链接:樱花,还有你

$\scr{\color{DarkOrchid}{Solution}}$


Subtask1


  • 这是一个送分的:总和都不到$n$,无论怎么收集,花瓣数肯定不到$n$,输出impossible 即可,$5$分。
  • 因为此题要取模,可能最后答案正好为10086001倍数而为$0$,但此时应该输出$0$,而不是impossible !

Subtask2


  • 直接暴搜,$20$分。

Subtask3


  • 那么,暴搜为什么时间多呢?

    因为一些重复的被算了很多次!例如在第3棵树下收集到5朵,而第4棵树下没有收集与在第4朵树下收集到5朵,除了答案需要再加1外,第5棵树往后是一样的搜法。

  • 考虑优化(记忆化)

    dp[i][j] 表示在第$i$棵树下,已经收集到$j$朵花的方案数(取模后的值)

    设$k$为(0≤k≤min(j,ai)),表示已经收集到的k朵樱花

    那么转移方程就很简单了:dp[i][j]=∑dp[i−1][j−k] 记得取模

  • 时间复杂度 Ο(n3)

Subtask4


  • 发现$i,j$无法省略,考虑能否把枚举$k$,转移这个循环优化,发现求的是一个像前面和的一个东西,想到了二维线段树前缀和优化
  • 但是,此题只有64MB,MLE,考虑优化空间
  • 发现每一个$dp[i][j]$只与$dp[i-1][...]$有关,考虑滚动数组优化

Code

#include<bits/stdc++.h>
#define L long long
const int mod=10086001;
using namespace std;
int a[5005],sum[5005];
int dp[5005];
int main()
{
int n,k,summ=0,ans=0;
scanf("%d%d",&n,&k);
for(int i=1;i<=k;i++) scanf("%d",&a[i]),summ+=a[i];
if(summ<n) return printf("impossible"),0;
sum[0]=1;
for(int i=1;i<=a[1];i++) sum[i]=sum[i-1]+1;
for(int i=a[1]+1;i<=n;i++) sum[i]=sum[i-1];
if(a[1]>=n) ans++;
for(int i=2;i<=k;i++)
{
for(int j=0;j<=n;j++)
{
if(j>a[i]) dp[j]=(sum[j]-sum[j-a[i]-1]+mod)%mod;
else dp[j]=sum[j]%mod;
}
sum[0]=dp[0];
for(int j=1;j<=n;j++) sum[j]=(sum[j-1]+dp[j])%mod;
ans=(ans+dp[n])%mod;
}
printf("%d",ans);
return 0;
}

后记:

  • 这是本蒟蒻的第一篇文章,如有写错的、写得不好的敬请提出。

Luogu P6394 樱花,还有你题解的更多相关文章

  1. luogu P1126 机器人搬重物 题解

    luogu P1126 机器人搬重物 题解 题目描述 机器人移动学会(\(RMI\))现在正尝试用机器人搬运物品.机器人的形状是一个直径\(1.6\)米的球.在试验阶段,机器人被用于在一个储藏室中搬运 ...

  2. 【luogu P2491 [SDOI2011]消防】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2491 题外话: OI一共只有三种题--会的题,不会的题,二分题. 题解: step 1 求树的直径,把树的直 ...

  3. 【luogu P1040 加分二叉树】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1040 今天考试考了一个区间DP...没错就是这个... 太蒟了真是连区间DP都不会...看了看题解也看不懂, ...

  4. Luogu P1351 联合权值 题解

    这是一个不错的树形结构的题,由于本蒟蒻不会推什么神奇的公式其实是懒得推...,所以很愉快的发现其实只需要两个点之间的关系为祖父和儿子.或者是兄弟即可. 然后问题就变得很简单了,只需要做一个正常的DFS ...

  5. 【luogu P1850 换教室】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1850 难的不在状态上,难在转移方程. (话说方程写错居然还有84分= =) #include <cst ...

  6. 【luogu P1558 色板游戏】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1558 我知道三十棵线段树很暴力,可是我们可以状压啊. 颜色最多30,不会爆int 另外 吐槽评测机 #inc ...

  7. 【luogu P3953 逛公园】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3953 题外话:感觉2017年神题好多..这还不是最神的一道,真在考场上我也就写个最短路计数暴力了.现在在大佬 ...

  8. 【luogu P1608 路径统计】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1608 补上一发最短路计数! 感谢王强qwqqqq @Lance1ot #include <queue& ...

  9. 【luogu P1156 垃圾陷阱】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1156 设\(dp[i][j]\)表示前i堆到达高度j时的所活最长时间 那么一旦到当前状态能到达满足的时间和高 ...

  10. 【luogu P2245 星际导航】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2245 = 货车运输 被逼着写过mst+lca 后来成了mst+树剖 #include <cstdio& ...

随机推荐

  1. 前端性能优化——首屏时间&&白屏时间

    1.首屏时间概念 首屏时间是指用户打开一个网站时,直到浏览器首页面内容渲染完成的时间. 2.白屏时间概念 白屏时间即是,浏览器开始显示内容的时间,所以我们一般认为解析完<head>的时刻, ...

  2. C#--@符号的使用(逐字字符串,跨行,声明关键字变量名)

    ---对字符串的使用 @可以定义逐字字符串 注意:@只对字符串常量有用 1)不需要用\\来转义非转义符号的\号   例如:@"\"="\\"2)可以实现多行字符 ...

  3. 执行xxx.sh脚本的两种方式

    因公司测试环境的登录模式有2种,大佬们直接写了个脚本完成一键切换,看了其中的脚本文件,其中出现了send "sh out.sh\r":一直疑惑这里的sh out.sh的意思...查 ...

  4. Vue2 到 Vue3,重温这 5 个常用的 API

    距离Vue3发布已经过去一年多时间了,从Vue2到Vue3是一个不小的升级,包括周边生态等.虽然目前大多数开发者们在使用的仍旧以Vue2为准,但Vue3显然是Vue开发者们未来必须面对的,而且前不久V ...

  5. 2022春每日一题:Day 40

    题目:[NOI2010] 超级钢琴 前求出美妙值的前缀和,然后倍增处理一下前缀和的最大值,然后对于一个左端点s,他能取到右端点的只有s+l到s+r,而他的最大贡献就是s+l 到s+r的最大子段和,因此 ...

  6. hyperworks2021位安装教程

    hyperworks2021位安装教程:1.先使用"百度网盘客户端"下载hw21_EN_x64软件安装包到电脑磁盘英文路径文件夹下,并鼠标右击进行解压缩,然后在文件夹内找到hwDe ...

  7. tekla软件安装教程

    Tekla2020 WIN10 64位安装步骤: 1.先使用"百度网盘客户端"下载Tekla2020_x64软件安装包到电脑磁盘,并鼠标右击进行解压缩,安装前先断开电脑网络,然后找 ...

  8. 面试 个人摸底监测 考察JavaScript基础 (第三天)

    01,如何开启JS严格模式?JS严格模式有什么特点? 两种方式 全局开启在js开头加上 'use strict' 局部开启,在作用域开头加上 function fn(){ 'use strict' } ...

  9. HDC2022的无障碍参会体验,手语服务是如何做到的?

    华为开发者大会2022(HDC)上,HMS Core手语数字人以全新形象亮相,并在直播中完成了长达3个多小时的实时手语翻译,向线上线下超过一千万的观众提供了专业.实时.准确的手语翻译服务,为听障人士提 ...

  10. Mybatis SQL 对应Oracle中javaType和jdbcType对应

    <resultMap type="java.util.Map" id="resultjcm"> <result property=" ...