1032 - A-B

Time Limit:1s Memory Limit:128MByte

Submissions:528Solved:105

DESCRIPTION
你有n个球,需要把他们放到m个盒子里。要求拥有最多球的盒子唯一,问方案数。
INPUT
一行两个数n、m(n、m≤500)
OUTPUT
一行一个数,表示方案数。答案对998244353取模。
SAMPLE INPUT
5 2
SAMPLE OUTPUT
6

思路:

测试数据很水,很暴力的dp也能过,O(n^3)

dp[i][j]表示i个盒子里面一共放了j个球的情况。

假设球数最多的盒子里面放了k个球,那么剩下的m-1个盒子里面只能放n-k个球,每个盒子最多[0,k-1]个球。

dp[i][j] = ∑dp[i-1][j-x], x∈[0, k]。

用pre[i][j]来求dp[i][j]的前缀和来优化一下。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
#define ll long long
const ll mod = 998244353;
ll dp[550][550];
ll pre[550][550];int main(){int n, m;scanf("%d%d", &n, &m);dp[0][0] = 1;for(int i=0; i<=n; i++) pre[0][i]=1;ll ans=0;for(int k=0; k<=n; k++){for(int i=1; i<m; i++){for(int j=0; j<=n; j++){dp[i][j]=0;/*for(int x=0; x<k; x++){ll sum = j-x>=0 ? dp[i-1][j-x]:0;dp[i][j] = (dp[i][j]+sum)%mod;}*/dp[i][j] = (pre[i-1][j] - (j-k>=0?pre[i-1][j-k]:0) + mod)%mod;pre[i][j] = ((j==0?0:pre[i][j-1]) + dp[i][j])%mod;}}ans = (ans+m*dp[m-1][n-k])%mod;}  printf("%lld\n", ans);return 0;
}

看了玲珑oj上面的题解,知道了一种 组合数学+容斥的解法

【ps:玲珑oj上面的题解有点小错误,,这个式子里减去的那部分忘记 *(-1)^k,整个式子要乘以盒子的数量,也就是m,非球的数量n】

利用容斥原理,最终的方案数=总方案数-不合法的方案数

find(i, j)表示将i个球放到j个盒子里的方案数,盒子里面允许为空

find(i, j) = C[i+j-1][j-1] 【这个公式不懂的可以参照这个博客:codeforces397C】

先枚举第一个盒子的数量,假设这是球数量最多的一个盒子,记为x,然后枚举有k个盒子球的数量>=第一个盒子

因此 ans = m*( find(n, m) - ∑((-1)^k) * (C[m-1][k] * find(n-x*(k+1),m-1) ) ), x∈[0,n], k∈[1,m-1]

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
#define ll long long
const ll mod = 998244353;
ll C[1050][1050];ll find(int x, int y){if(x+y-1<0 || y-1<0) return 0;return C[x+y-1][y-1];
}int main(){int n, m;scanf("%d%d", &n, &m);C[0][0]=1;C[1][0] = C[1][1] = 1;  for (int i = 2; i <= 1000; i++){  C[i][0] = 1;  for (int j = 1; j <= 1000; j++)  C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod;  }  ll ans = 0;for(int x=0; x<=n; x++){for(int k=1; k<m; k++){ll sum = find(n-x*(k+1), m-1);ans = (ans + (k%2==1?1:-1)*C[m-1][k]*sum%mod)%mod;ans = (ans+mod)%mod;}}ans = (find(n, m)-ans+mod)%mod;ans = m*ans%mod;printf("%lld\n", ans);return 0;
} 

玲珑oj 1032A-B(组合数学)相关推荐

  1. 玲珑oj 1129 ST

    1129 - 喵哈哈村的战斗魔法师丶坏坏い月 Time Limit:3s Memory Limit:256MByte Submissions:490Solved:107 DESCRIPTION 坏坏い ...

  2. 玲珑oj 1032 (容斥原理或前缀和优化dp)

    题面十分简单,n个球放m个盒子,可以空,盒子不同,要求球数最多的盒子唯一,方案数题面十分简单,n个球放m个盒子,可以空,盒子不同,要求球数最多的盒子唯一,方案数 n,m都是500,考虑复杂度O(n3) ...

  3. 玲珑oj 1143 - 计算几何你瞎暴力 思维

    Description 今HH考完了期末考试,他在教学楼里闲逛,他看着教学楼里一间间的教室,于是开始思考: 如果从一个坐标为 (x1,y1,z1)的教室走到(x2,y2,z2)的距离为|x1 - x2 ...

  4. “玲珑杯”郑州轻工业学院第九届ACM程序设计大赛圆满结束

    "玲珑杯"郑州轻工业学院第九届ACM程序设计大赛圆满结束 ACM/ICPC国际大学生程序设计竞赛由美国计算机学会主办,是目前国际大学生计算机相关领域公认规模最大.水平最高的赛事之一 ...

  5. FJUT OJ 2466 T^T的叛乱计划(组合数学)

    T^T的叛乱计划 TimeLimit:3000MS  MemoryLimit:64MB 64-bit integer IO format:%lld 已解决 | 点击收藏 Problem Descrip ...

  6. 玲珑学院OJ 1130 - 喵哈哈村的魔法大师╳灬兲笙疯癫°月【强连通+可相交最小路径覆盖+背包】

    1130 - 喵哈哈村的魔法大师╳灬兲笙疯癫°月 Time Limit:1s Memory Limit:256MByte Submissions:196Solved:23 DESCRIPTION ╳灬 ...

  7. 组合数学--排列组合

    组合数学--排列组合 1. 概述 1.1 应用 1.2 三大问题 2. 排列组合 2.1 两大法则 2.2 排列 3. 放球模型 4. 模型转换 5. 线性方程的解 5.1 若干等式及其组合意义 6. ...

  8. c语言oj竞选投票,Just oj 2018 C语言程序设计竞赛(高级组)H: CBT?

    H: CBT? 时间限制: 1 s      内存限制: 128 MB      提交 我的状态 题目描述 对于二叉树,如果这棵树的节点排布是按行从上到下,每行从左到右挨个放置,中间不会有空闲的节点. ...

  9. 南大算法设计与分析课程OJ答案代码(5)--割点与桥和任务调度问题

    问题 A: 割点与桥 时间限制: 1 Sec  内存限制: 5 MB 提交: 475  解决: 34 提交 状态 算法问答 题目描述 给出一个无向连通图,找到所有的割点和桥 输入 第一行:点的个数,如 ...

最新文章

  1. matlab怎么跑.cpp程序,MATLAB编译cpp文件
  2. ABP Framework 为什么好上手,不好深入?探讨最佳学习姿势!
  3. 你还记得windows workflow foundation吗
  4. CORS跨域时axios无法获取服务器自定义的header信息 - 番外篇
  5. [代码]Delphi实现双击左CTRL键调用记事本
  6. 微信自动抢红包软件被判赔475万
  7. iOS 自带地图定位失败原因 Code=0和Code=1区别
  8. C语言:求1到100之间的所有素数,并设定每行输出5个素数
  9. knife4j文档请求异常_umi-request 网络请求之路
  10. jsp手机h5页面出现了 微信链接带打开何新浪uc打开格式都显示css起作用,但是用谷歌浏览器显示css没起作用
  11. The CUDA compiler identification is unknown 解决
  12. KEIL expected an identifier
  13. C#学习——识别U盘
  14. QT中QSet容器报错: error: C2678: 二进制“==”: 没有找到接受“const Key类型的左操作数的运算符。
  15. echarts青岛市地图下钻到区市及根据各个区市经纬度在各区市地图绘制散点图和道路线
  16. RoboCup智能机器人足球教程(三)
  17. 面试知识点——(金三银四你需要的是她)
  18. 从耦合微带线到近、远端串扰
  19. RAID磁盘阵列详解and软阵列(raid0,raid1,raid5,raid1+0 热备盘)配置实验
  20. 防近视护眼台灯哪个牌子好?无蓝光无频闪的护眼台灯推荐

热门文章

  1. android 自定义 对号,Android 自定义View 对勾CheckBox
  2. Linux只读文件系统
  3. 加密流量分类-论文1:Deep Learning for Encrypted Traffic Classification: An Overview
  4. Linux命令窗口如何调节大小
  5. Java - 传参到底是哪种? pass by value or pass by reference
  6. 舒亦梵:4.24非农周大数据即将来临,黄金行情将是怎样
  7. sparksql出现 serious problem at org.apache.hadoop.hive.ql.io.orc.OrcInputFormat.generateSplitsInfo
  8. python数据分析实战五_简单的python数据分析实战——黑五销售数据分析
  9. 增加seo好感度,wordpress给文章增加og协议,即meta标签形式如 meta property=”og:
  10. 这里是一个有关KiTTY本地化程序 cnKiTTY的简单说明~~