Luogu P6394 樱花,还有你题解
原题链接:樱花,还有你
$\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 樱花,还有你题解的更多相关文章
- luogu P1126 机器人搬重物 题解
luogu P1126 机器人搬重物 题解 题目描述 机器人移动学会(\(RMI\))现在正尝试用机器人搬运物品.机器人的形状是一个直径\(1.6\)米的球.在试验阶段,机器人被用于在一个储藏室中搬运 ...
- 【luogu P2491 [SDOI2011]消防】 题解
题目链接:https://www.luogu.org/problemnew/show/P2491 题外话: OI一共只有三种题--会的题,不会的题,二分题. 题解: step 1 求树的直径,把树的直 ...
- 【luogu P1040 加分二叉树】 题解
题目链接:https://www.luogu.org/problemnew/show/P1040 今天考试考了一个区间DP...没错就是这个... 太蒟了真是连区间DP都不会...看了看题解也看不懂, ...
- Luogu P1351 联合权值 题解
这是一个不错的树形结构的题,由于本蒟蒻不会推什么神奇的公式其实是懒得推...,所以很愉快的发现其实只需要两个点之间的关系为祖父和儿子.或者是兄弟即可. 然后问题就变得很简单了,只需要做一个正常的DFS ...
- 【luogu P1850 换教室】 题解
题目链接:https://www.luogu.org/problemnew/show/P1850 难的不在状态上,难在转移方程. (话说方程写错居然还有84分= =) #include <cst ...
- 【luogu P1558 色板游戏】 题解
题目链接:https://www.luogu.org/problemnew/show/P1558 我知道三十棵线段树很暴力,可是我们可以状压啊. 颜色最多30,不会爆int 另外 吐槽评测机 #inc ...
- 【luogu P3953 逛公园】 题解
题目链接:https://www.luogu.org/problemnew/show/P3953 题外话:感觉2017年神题好多..这还不是最神的一道,真在考场上我也就写个最短路计数暴力了.现在在大佬 ...
- 【luogu P1608 路径统计】 题解
题目链接:https://www.luogu.org/problemnew/show/P1608 补上一发最短路计数! 感谢王强qwqqqq @Lance1ot #include <queue& ...
- 【luogu P1156 垃圾陷阱】 题解
题目链接:https://www.luogu.org/problemnew/show/P1156 设\(dp[i][j]\)表示前i堆到达高度j时的所活最长时间 那么一旦到当前状态能到达满足的时间和高 ...
- 【luogu P2245 星际导航】 题解
题目链接:https://www.luogu.org/problemnew/show/P2245 = 货车运输 被逼着写过mst+lca 后来成了mst+树剖 #include <cstdio& ...
随机推荐
- OpenAPI 接口幂等实现
OpenAPI 接口幂等实现 1.幂等性是啥? 进行一次接口调用与进行多次相同的接口调用都能得到与预期相符的结果. 通俗的讲,创建资源或更新资源的操作在多次调用后只生效一次. 2.什么情况会需要保证幂 ...
- 说说 Redis 事务
更多技术文章,请关注我的个人博客 www.immaxfang.com 和小公众号 Max的学习札记. Redis 事务简介 Redis 只是提供了简单的事务功能.其本质是一组命令的集合,事务支持一次执 ...
- 创建base公共组件
公共模块 基础模块参照了vant的思路,使用bem命名规范.先创建一个命名空间,这个命名空间返回创建组件函数与生成命名方法.在创建组件函数中创建name与install属性用于注册vue组件 创建组件 ...
- 【k8s连载系列】k8s介绍
k8s是Kubernetes的缩写,Google 于 2014 年开源了 Kubernetes 项目. 一.k8s的历史演变 k8s的演变过程:首先从传统的服务-->虚拟机部署-->容器部 ...
- I Love Big Numbers !(高精度)
题目链接 题意: 多组数据输入也就是C++中的: int n; while (cin >> n) { 代码块 } 对于每个数据输出其阶乘的各位上的数字之和.大眼一看,没有思路,那就百度把. ...
- 【GUI开发案例】用python爬百度搜索结果,并开发成exe桌面软件!
一.背景介绍 你好,我是 @马哥python说 ,一名10年程序猿. 1.1 老版本 之前我开发过一个百度搜索的python爬虫代码,具体如下: [python爬虫案例]用python爬取百度的搜索结 ...
- JSON提取器中串联一个接口的多个值传给下个接口(compute concatenation var的实际使用场景)
实际场景:某功能在前端支持选择多条数据后点击提交,表现在接口是,一次传了多个Id. 问题:需要将上个接口的多个Id串联,传给提交接口. 处理方式:通过JSON提取器勾选:compute concate ...
- 【Java SE进阶】Day05 异常,线程
一.异常 1.概念 程序执行过程中,出现非正常情况导致JVM的非正常停止 本身是一个类,产生异常即创建并抛出一个异常对象 Java处理异常的方式是进行中断处理 异常非语法错误,语法错误直接不会产生cl ...
- React DevUI 18.0 正式发布🎉
Jay 是一位经验丰富并且对质量要求很高的开发者,对 Angular.React 等多种框架都很熟悉,我们在开源社区认识,在我做开源社区运营的过程中,Jay 给了我很多帮助,他也是 React Dev ...
- python语法之注释
引言 注释的最大作用是提高程序的可读性,在开发过程中非常有必要加上注释.Python 支持两种类型的注释,分别是单行注释和多行注释. 1 单行注释 Python 使用井号#作为单行注释的符号,语法格式 ...