【模拟7.19】那一天我们许下约定(组合数学,DP)
看了题目名字深切怀疑出题人是不是失恋了,然后出题折磨我们。然后这题就愉快的打了个暴力,最后莫名其妙wa20,伤心.....
其实这题正解不是很难想,如果说把暴力的DP搞出来,正解也差不到哪去了,
我们发现此题中暴力的话
一层枚举D即天数,另一层枚举当前给过的饼干数j,然后还有一层枚举上一层的饼干数,(当然还可以通过前缀和删去一维)
但是我们观察数据范围,发现D及其的大!!!!!!!
显然枚举中不能出现D
有一条显然的性质,如果你有N块饼干,那么最多给N天,每天给一块就会给完。
那么我们第一维枚举至N,表示每一天一定给
最后统计答案时(i:1~N)f[i][N]*C(D,i);即可
(本题中D过大,所以不能用逆元,改用递推O(n)求,*(D-i)时要取模,不然会暴)
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<string>
5 #include<cmath>
6 #include<algorithm>
7 #define ll long long
8 using namespace std;
9 #define MAXN 2010
10 const ll mod=998244353;
11 ll f[MAXN][MAXN];
12 ll N,D,M;
13 ll ni[MAXN],ni_c[MAXN];
14 ll a[MAXN][MAXN];
15 ll max1(ll x,ll y)
16 {
17 return (x>y)?x:y;
18 }
19 ll min1(ll x,ll y)
20 {
21 return (x<y)?x:y;
22 }
23 void work()
24 {
25 f[0][0]=1;a[0][0]=1;
26 for(ll i=1;i<=N;++i)
27 {
28 ll R=min(N,(M-1)*i);
29 for(ll j=1;j<=N;++j)
30 {
31 a[i-1][j]=(a[i-1][j-1]+f[i-1][j]+mod)%mod;
32 }
33 for(ll j=i;j<=R;++j)
34 {
35 ll L=max1(i-1,j-M+1);
36 /*for(ll k=L;k<=j-1;++k)
37 {
38 f[i][j]=(f[i][j]+f[i-1][k])%mod;
39 }*/
40 f[i][j]=(f[i][j]%mod+(a[i-1][j-1]-a[i-1][L-1]+mod)%mod+mod)%mod;
41 //printf("f[%lld][%lld]=%lld\n",i,j,f[i][j]);
42 }
43 }
44 ll sum=0ll;ll ans=1ll;
45 for(ll i=1;i<=N;++i)
46 {
47 if(i>D)continue;
48 ans=(ans*((D-i+1)%mod)+mod)%mod;
49 sum=(sum+(f[i][N]*(ans*ni_c[i]%mod+mod)+mod)%mod+mod)%mod;
50 //printf("f=%lld C=%lld\n",f[i][N],C(D,i));
51 }
52 printf("%lld\n",sum%mod);
53 }
54 int main()
55 {
56 // freopen("text.in","r",stdin);
57 // freopen("wa.out","w",stdout);
58 ni_c[1]=1;ni[1]=1;
59 ni_c[0]=1;ni[0]=1;
60 for(ll i=2;i<=2000;++i)
61 {
62 ni[i]=((mod-mod/i)*ni[mod%i])%mod;
63 ni_c[i]=(ni_c[i-1]*ni[i])%mod;
64 }
65 while(cin>>N>>D>>M)
66 {
67 if(N==0&&D==0&&M==0)break;
68 memset(f,0,sizeof(f));
69 memset(a,0,sizeof(a));
70 work();
71 }
72 }
【模拟7.19】那一天我们许下约定(组合数学,DP)的更多相关文章
- [CSP-S模拟测试]:那一天我们许下约定(DP+组合数学)
题目传送门(内部题2) 输入格式 每个测试点有多组测试数据.对于每组数据,有一行共三个整数$N$,$D$,$M$含义如题.输入结束标识为$“0 0 0”$ (不含引号). 输出格式 对于每组数据,输出 ...
- HZOJ 20190719 那一天我们许下约定(dp+组合数)
这个题目背景真的是让我想起了当年... 不说了,言归正传,这题,一眼看去30分暴力还是很好拿的,但我因为考试时的心态问题没有处理好细节爆了零. 30分暴力的普遍思路的复杂度应该是$O(nmd)$的,但 ...
- NOIP模拟测试6「那一天我们许下约定(背包dp)·那一天她离我而去」
那一天我们许下约定 内部题,题干不粘了. $30分算法$ 首先看数据范围,可以写出来一个普通dp #include<bits/stdc++.h> #define ll int #defin ...
- 「模拟8.19 A嚎叫..(set) B主仆..(DFS) C征程..(DP+堆优化)」
为啥这一套题目背景感到很熟悉. T1 嚎叫响彻在贪婪的厂房 考试一个小时没调出来,自闭了.......... 正解很好想,最后实在打不出来了只好暴力骗分了... 联想到以前做的题:序列(涉及质因数分 ...
- HZOI2019 A. 那一天我们许下约定 dp
题目大意:https://www.cnblogs.com/Juve/articles/11219089.html 读这道题的题目让我想起了... woc我到底在想什么?好好写题解,现在不是干那个的时候 ...
- HZOJ 那一天我们许下约定
比较好想的一道题,只是那个组合数比较恶心. 先说一下我最开始想的$n^4$的沙雕dp: 设f[i][j][k]为前i天给了j个,第i天给了k个,则f[i][j][k]=∑f[i-1][j-k][o]; ...
- 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现
一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...
- 解析“60k”大佬的19道C#面试题(下)
解析"60k"大佬的19道C#面试题(下) 在上篇中,我解析了前 10 道题目,本篇我将尝试解析后面剩下的所有题目. 姐妹篇:解析"60k"大佬的19道C#面试 ...
- NOIP模拟测试19「count·dinner·chess」
反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...
随机推荐
- PHP解压压缩包文件到指定目录的实现
$src_file为文件路径,上传文件返回压缩包路径即可 public function unzip($src_file, $dest_dir=false, $create_zip_name_dir= ...
- 手写Spring MVC框架(一) 实现简易版mvc框架
前言 前面几篇文章中,我们讲解了Spring MVC执⾏的⼤致原理及关键组件的源码解析,今天,我们来模仿它⼿写⾃⼰的mvc框架. 先梳理一下需要实现的功能点: tomcat加载配置文件web.xml: ...
- 头文件string.h,cstring与string
string.h string.h是一个C标准头文件,所有的C标准头文件都形如name.h的形式,通过#include <string.h>可以导入此头文件.之后我们就可以在程序中使用st ...
- C++ primer plus读书笔记——第6章 分支语句和逻辑运算符
第6章 分支语句和逻辑运算符 1. 逻辑运算符的优先级比关系运算符的优先级低. 2. &&的优先级高于||. 3. cctype中的函数P179. 4. switch(integer- ...
- Aliyun SSL 证书签发&安装
目录 HTTPS SSL证书 签发 和 应用 证书购买 证书申请 证书安装 参考文档 HTTPS SSL证书 签发 和 应用 - SSL证书服务(Alibaba Cloud SSL Certifica ...
- 014.Ansible Playbook Role 及调试
一 role 简介 在ansible中,role是将playbook分割为多个文件的主要机制,大大简化了复杂的playbook的编写,同时已与复用 role各个目录的作用及可用文件 files:存放由 ...
- Samba服务配置及配置文件说明
前言 1.配置Samba服务为什么要关闭防火墙(firewalld)和Selinux? 在linux操作系统中默认开启了防火墙,Selinux也处于启动状态,一般状态为enforing:所以,在我们搭 ...
- 【转载】 Linux常用命令: zip、unzip 压缩和解压缩命令
Linux常用命令: zip.unzip 压缩和解压缩命令 Linux常用命令: zip.unzip 压缩和解压缩命令 zip的用法 基本用法是: zip [参数] [打包后的文件名] [打包的目 ...
- python基础之常用模块一(sys、greenlet、pymysql、paramiko、pexpect、configparser)
一.sys模块(内置模块) 用于提供对解释器相关的操作 import syssys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) ...
- Docker的镜像理解以及容器的备份、恢复和迁移操作
Docker的镜像理解以及容器的备份.恢复和迁移操作 这篇文章主要介绍了Docker的镜像理解以及容器的备份.恢复和迁移操作,覆盖很多原理知识以及容器的重要操作步骤,极力推荐!需要的朋友可以参考下 D ...