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& ...
随机推荐
- AIR32F103(三) Linux环境基于标准外设库的项目模板
目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...
- 事件循环Event Loop
在 事件循环 期间的某个时刻,运行时会从最先进入队列的消息开始处理队列中的消息.被处理的消息会被移出队列,并作为输入参数来调用与之关联的函数.正如前面所提到的,调用一个函数总是会为其创造一个新的栈帧. ...
- Windows7下驱动开发与调试体系构建——2.R3与R0的通信示例
目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html 在阅读本节前,建议先阅读<Windows内核安全与驱动开发>第五章内容, ...
- 微信小程序——悬浮按钮
关键: position: fixed; wxml: <navigator url="/pages/issue/index"><image class='i ...
- 如何在.NET程序崩溃时自动创建Dump?
今天在浏览张队转载文章的留言时,遇到一个读者问了这样的问题,如下图所示: 首先能明确的一点是"程序崩溃退出了是不能用常规的方式dump的",因为整个进程树都已经退出.现场已经无法使 ...
- ES6 学习笔记(二)解构赋值
一.数组的解构赋值 1.基本用法 ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,该操作即为解构 如: let [a,b,c]=[1,2,3]; console.log(a,b,c) ...
- Pycharm自定义实时模板
pycharm添加模板 添加装饰器模板 # 1.file-->Setting-->Editor-->Code Style -->Live Templates# 2." ...
- c++ 关于引用变量你不知道的东西
引用变量延迟绑定 我们知道引用变量定义时要立刻赋值,告诉编译器他是谁的引用.如果不赋值,编译会失败. 如果引用变量是单个定义的,对他赋值还比较简单. struct test_T { int data; ...
- C语言嵌套for循环实现冒泡排序
使用嵌套for循环实现冒泡排序的一个函数. #include<stdio.h> /** * 介绍: * 使用嵌套for循环实现冒泡排序,由小到大(上小下大). * 参数: * sum[]: ...
- MySQL该使用哪种CPU架构服务器?
1. 摘要 近期,阿里云推出基于 ARM 架构的 RDS MySQL 和 RDS PostgreSQL 实例,现处于邀测阶段,阿里云宣传 ARM 架构的亮点是:在价格下降13%的基础上,平均性能 AR ...