看了题目名字深切怀疑出题人是不是失恋了,然后出题折磨我们。然后这题就愉快的打了个暴力,最后莫名其妙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)的更多相关文章

  1. [CSP-S模拟测试]:那一天我们许下约定(DP+组合数学)

    题目传送门(内部题2) 输入格式 每个测试点有多组测试数据.对于每组数据,有一行共三个整数$N$,$D$,$M$含义如题.输入结束标识为$“0 0 0”$ (不含引号). 输出格式 对于每组数据,输出 ...

  2. HZOJ 20190719 那一天我们许下约定(dp+组合数)

    这个题目背景真的是让我想起了当年... 不说了,言归正传,这题,一眼看去30分暴力还是很好拿的,但我因为考试时的心态问题没有处理好细节爆了零. 30分暴力的普遍思路的复杂度应该是$O(nmd)$的,但 ...

  3. NOIP模拟测试6「那一天我们许下约定(背包dp)·那一天她离我而去」

    那一天我们许下约定 内部题,题干不粘了. $30分算法$ 首先看数据范围,可以写出来一个普通dp #include<bits/stdc++.h> #define ll int #defin ...

  4. 「模拟8.19 A嚎叫..(set) B主仆..(DFS) C征程..(DP+堆优化)」

    为啥这一套题目背景感到很熟悉. T1  嚎叫响彻在贪婪的厂房 考试一个小时没调出来,自闭了.......... 正解很好想,最后实在打不出来了只好暴力骗分了... 联想到以前做的题:序列(涉及质因数分 ...

  5. HZOI2019 A. 那一天我们许下约定 dp

    题目大意:https://www.cnblogs.com/Juve/articles/11219089.html 读这道题的题目让我想起了... woc我到底在想什么?好好写题解,现在不是干那个的时候 ...

  6. HZOJ 那一天我们许下约定

    比较好想的一道题,只是那个组合数比较恶心. 先说一下我最开始想的$n^4$的沙雕dp: 设f[i][j][k]为前i天给了j个,第i天给了k个,则f[i][j][k]=∑f[i-1][j-k][o]; ...

  7. 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现

    一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...

  8. 解析“60k”大佬的19道C#面试题(下)

    解析"60k"大佬的19道C#面试题(下) 在上篇中,我解析了前 10 道题目,本篇我将尝试解析后面剩下的所有题目. 姐妹篇:解析"60k"大佬的19道C#面试 ...

  9. NOIP模拟测试19「count·dinner·chess」

    反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...

随机推荐

  1. python-内置函数-文件操作

    文件操作 用的最多的就是r+,w+和a+都有局限性 w+是先清空,然后再写,之后再读 a+是无论如何调整指针位置,写时都在文件最后追加 而r+可以通过调整指针位置来确定写入的位置 文件操作之with处 ...

  2. SwiftUI 简明教程之指示器

    本文为 Eul 样章,如果您喜欢,请移步 AppStore/Eul 查看更多内容. Eul 是一款 SwiftUI & Combine 教程 App(iOS.macOS),以文章(文字.图片. ...

  3. 基于RestAssured实现接口自动化

    RestAssured是一款强大的接口自动化框架, 旨在使用方便的DSL,简化的接口自动化. 下面是基于RestAssured扩展的一个简单框架示例, 先看看用例的风格: package testca ...

  4. 【BUAA软工】提问回顾与个人总结

    链接到以前提问题的博客 在之前的博客我曾经提问过以下几个问题 为什么单元测试必须由写程序的人完成? 过早优化,过早泛华:何时为过早? 为何使用goto语句? 用户需求分析:分而治之,如何分? 兼容性测 ...

  5. 无连接运输:UDP

    多路复用和解复用与校验和是UDP唯一能做的事,运输层的协议必须做点什么,什么都没有就不需要这一层了. 为什么要使用UDP 既然有了可靠传输的TCP,为什么还要在udp之上来构件应用呢? 有效载荷大,T ...

  6. [bug] Hive启动报错:hive Name node is in safe mode.

    关闭HDFS安全模式 hadoop dfsadmin -safemode leave

  7. git/repo常用命令

    Git作为广受欢迎的一款版本控制工具,它该如何通过命令行使用呢?本文为你揭晓浓缩精华精华版:git常用命令一览,含部分repo操作. 代码下载 repo init -- -->初始化需要下载的分 ...

  8. 6.5 scp:远程文件复制

    scp命令 用于在不同的主机之间复制文件,它采用SSH协议来保证复制的安全性.scp命令每次都是全量完整复制,因此效率不高,适合第一次复制时使用,增量复制建议使用rsync命令替代.     scp ...

  9. 10.11 arping:发送arp请求

    arping命令 是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包检查局域网内所有设备的硬件地址.  arping 命令的参数选项及说明 -c <次数>       ...

  10. 用 Python 写个贪吃蛇,保姆级教程!

    本文基于 Windows 环境开发,适合 Python 新手 本文作者:HelloGitHub-Anthony HelloGitHub 推出的<讲解开源项目>系列,本期介绍 Python ...