【ZBH选讲·模数和】
【问题描述】
你是能看到第二题的friends呢。
——laekov
Hja和Yjq在玩游戏,这个游戏中Hja给了Yjq两个数,希望Yjq找到一些非负整数使得这些数的和等于n,并且所有数模maaaaaaaaaaaaaa 的值互不相同,求方案数。
【输入格式】
一行两个整数。
【输出格式】
一行一个整数代表答案对取模之后的结果。
【样例输入1】
3 3
【样例输出1】
9
【样例输入2】
523 44
【样例输出2】
338398304
【数据规模与约定】
对于100%的数据, n<=1e18 ,m<=100
题解:
①根据题意列出构造背包体积的式子:
a1+a2+a3……+ak=n 然后%m得到:
b1+b2+b3……+bk=n'(其中:bi=ai%m,n'=n%m)
②那么由于m的范围: 0<=bi<m 此时可以进行背包,物品体积独一无二。
③又因为∑bi 的最大值为:1+2+3+……+(m-1)=m*(m-1)/2 ,注意到可能会超过m
④令f[i][j]表示总共用了i个物品构造体积为j的方案数,就正常的背包DP转移就是了。
⑤此时的结果是取模下的结果,又因为:n=n'+k*m ,相当于物品总共还要增加k*m的权值
⑥由于状态记录了物品个数,也就是将k个m分给i个物品,此处为组合数计数(插隔板…)
⑦这道题由于要求内部组合顺序算作不同方案,因此需要乘上排列数。
⑧总结上述方法,答案为∑f[i][j]*C(插隔板)*(i!) (1<=i<=m,j=n%m+k*m且j<=m*(m-1)/2)
⑨主程序化简递推组合数式子可达O(n3),但是预处理依旧是O(n4),不要相信时间复杂度。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#ifdef unix
#define LL "%lld"
#else
#define LL "%I64d"
#endif
const int maxn=110;
const int maxs=maxn*maxn/2;
const int mo=905229641;
long long n;
int m,f[maxn][maxs],fac[maxn];
int calc(long long a,long long b)
{long long ans=1;for(int c=1;c<a;c++)ans=ans*(b+c)%mo;return (int)ans;
}int main()
{scanf(LL "%d",&n,&m);f[0][0]=1;int up=m*(m-1)/2;for (int a=0;a<m;a++)for (int b=m;b>=0;b--)for (int c=up;c>=0;c--)if (f[b][c]) f[b+1][c+a]=(f[b+1][c+a]+f[b][c])%mo;fac[0]=1;for (int a=1;a<=m;a++)fac[a]=(long long)fac[a-1]*a%mo;int x=(int)(n%m);int ans=0;for (int a=x;a<=n && a<=up;a+=m){long long rest=(n-a)/m;for (int b=1;b<=m;b++)if (f[b][a]){int nowans=calc(b,rest%mo);nowans=(long long)nowans*f[b][a]%mo;nowans=(long long)nowans*b%mo;ans=(ans+nowans)%mo;}}printf("%d\n",ans);return 0;
}//Ztraveler
桌上那张发黄的相片,唤起我心中无尽的思念,
我终于失去你的那一天,我才明白你就是永远……——————汪峰《窗台》
转载于:https://www.cnblogs.com/Damitu/p/7660851.html
【ZBH选讲·模数和】相关推荐
- 【ZBH选讲·树变环】
[问题描述] 你是能看到第三题的friends呢. --aoao 树是个好东西,删掉树一条边要1的代价,随便再加一条边有1的代价,求最小的代价把树变成环. [输入格式] 第一行一个整数,代表树的点数. ...
- 【ZBH选讲·拍照】
[问题描述] 假设这是一个二次元. LYK召集了n个小伙伴一起来拍照.他们分别有自己的身高Hi和宽度Wi. 为了放下这个照片并且每个小伙伴都完整的露出来,必须需要一个宽度为ΣWi,长度为max{Hi} ...
- UA CSC696H 强化学习理论选讲1 强化学习概览
UA CSC696H 强化学习理论选讲1 强化学习概览 强化学习相关概念 Markov Decision Processes(MDP)简介 Policy Evaluation 强化学习(reinfor ...
- 练习图200例图纸讲解_【宅家数学课23】经典微课6:苏教版六年级下册比例尺典型例题选讲及练习(含答案)...
(截止日期:3月31日) 学习过程 1.点击观看经典微课: 微课视频 <比例尺> 2.认真学习典型例题,完成下方练习题 3.查看答案,在家长指导下批改,订正错误. 苏教版小学数学六年级下册 ...
- C++11新特性选讲 语言部分 侯捷
C++11新特性选讲 语言部分 侯捷 本课程分为两个部分:语言的部分和标准库的部分.只谈新特性,并且是选讲. 本文为语言部分笔记. 语言 Variadic Templates move semanti ...
- 20190509杂题选讲
这次杂题选讲好多思维题神仙题啊= =顺便学了波线段树上二分= = Normal 题目大意戳这 CF1083C CDW讲的神仙题*1 题解戳这 AGC002E 我讲的题,是个人写的程序都比我写的程序跑得 ...
- PJ可能会用到的动态规划选讲-学习笔记
PJ可能会用到的动态规划选讲-学习笔记 by Pleiades_Antares 难度和速度全部都是按照普及组来定的咯 数位状压啥就先不讲了 这里主要提到的都是比较简单的DP 一道思维数学巧题(补昨天) ...
- [统计学笔记] 统计学计算题选讲(精华)
统计学计算题选讲 第 1 题 某班级学生物理课程考试成绩分别为: 68 89 88 84 86 87 75 73 72 68 75 ...
- 4.4 竞赛题目选讲
竞赛题目选讲 这里的题目可能和大家在做的实验项目有些不太一样,希望大家根据自己的需要阅读本章节. 4-2 刽子手游戏 (UVA 489) 书上的题面少了一些很重要的东西,真正的题面请点开这里 分析:根 ...
最新文章
- Spark2.1.0之初识Spark
- 关于HashCode方法,可变对象和内存泄漏问题
- 学习编程的25个“坑”,你踩到了吗?
- python弹出警告框_selenium+webdriver+python 中警告框的处理方法
- mysql分别写出3条索引_MySQL3:索引
- Cpp 对象模型探索 / 静态局部对象只构造一次的原因和执行析构的方法
- 启动Cognos时报0106错误
- arry-718 Maximum Length of Repeated Subarray
- java string.substring 参数,Java,String类中的subString()方法,stringsubstring
- 联发科固件现窃听漏洞,影响全球约三分之一的手机和物联网设备
- 进阶10 补充知识点
- BC 2015在百度之星程序设计大赛 - 预赛(1)(KPI-树董事长)
- 为什么重复率高的字段不适合作为索引
- chm打开秒退_求教hmcl启动器1.12.2非正常退出问题(百度过了,都不行)
- 计算机编程语言及C语言简介,编程语言基础:C语言
- 为什么要用babylonJS
- java ios内购凭证_iOS内购看我就够了(含代码)
- 简单的二维码生成接口,自动生成二维码,返回图片地址
- SV学习笔记—变量及数组随机化约束常犯的错误
- python开发项目:学生选课系统
热门文章
- 【C++学习笔记】复合类型和const限定符
- 用keil编写C语言流水灯程序,简述关于Keil、STM32 用C++编写流水灯程序
- GitHub界面各个页签作用
- Webstorm 分屏操作
- pyscripter与python的关系_Codecademy Python和Pyscripter提供错误消息
- 某广告SDK流量加解密-响应
- 利用电子邮件“钓鱼”的常见手段
- SQL中destinct的用法
- #442 不叁不肆:独居,阳了,没事,快好了
- 受损固态硬盘(SSD)数据恢复方法(福利:固态硬盘免费恢复数据)