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

【解题方法1】

dp。

【参考blog】感谢http://blog.csdn.net/yhyyxt/article/details/52549053

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

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

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

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

【AC 代码1】

//
//Created by just_sort 2016/9/25 15:11
//Copyright (c) 2016 just_sort.All Rights Reserved
//#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
ll dp[505][505];
ll sum[505][505];
int main()
{int n,m;while(scanf("%d%d",&n,&m)!=EOF){dp[0][0] = 1LL;for(int i=0; i<=n; i++) sum[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;dp[i][j] = (sum[i-1][j] - (j-k>=0 ? sum[i-1][j-k]:0) + mod)%mod;sum[i][j] = ((j==0 ? 0: sum[i][j-1]) + dp[i][j])%mod;}}ans = (ans + m*dp[m-1][n-k])%mod;}printf("%lld\n",ans);}return 0;
}

【解题方法2】

组合数学,容斥!

【这个公式有错误】首先ans应该是乘以盒子的数量m,然后里面-的部分应该是*(-1)^k,容斥奇数加偶数减,并且还有一个问题就是n个球放在m个盒子里面,盒子可以为空的方案数的求法,可以参考这篇文章:http://wenku.baidu.com/link?url=snRwVkBTJ0FUvHuU11v_Cmp4BzqUCvuayU27ZSjupARpk_qwn_EyuRpcLamO2pJfDODKpPCaDphlGFkUSvKogeuGPQUD4O-ujDaY24JKEpu

具体公式如下:ps:公式c(n+num-1,n-1)的由来(高中学过的)

将num个相同的红球放到n个盒子里去,每个盒子可以装多个球,也可以不装球,问有多少种放球的方式?

将设每个盒子里面原本就有1个球,将这n个球取出,和num个球混合在一起,那么球的总数就是m=num+n,我们要求的就转化为将m个相同的红球放到n个盒子里的方法有多少种?每个盒子至少有一个球!答案显然就是c(m-1,n-1)

【AC 代码】

//
//Created by just_sort 2016/9/25 15:11
//Copyright (c) 2016 just_sort.All Rights Reserved
//#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
ll C[1050][1050];
ll work(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;while(scanf("%d%d",&n,&m)!=EOF){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 = work(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 = (work(n,m) - ans + mod)%mod;ans = m * ans;printf("%lld\n",ans);}return 0;
}

玲珑杯 1032 A-B相关推荐

  1. 玲珑杯2.5 1032 A-B

    假设第一个盒子装的时最多的球,枚举唯一最大值x,剩下n-x个球需要放在m-1个盒子里面. 令k=n-x,f(i,j)为将i个球放到j个盒子里则答案为 其中f(i,j)为C(i+j-1,j-1). 由于 ...

  2. 3分钟解决MySQL 1032 主从错误(转)

    转自  https://blog.51cto.com/suifu/1845457 3分钟解决MySQL 1032主从错误 Part1:写在最前 1032错误----现在生产库中好多数据,在从库误删了, ...

  3. mysql 主从复制的1032错误

    Could not execute Delete_rows event on table testdb.t_www; Can't find record in 't_www', Error_code: ...

  4. 3分钟解决MySQL 1032 主从错误

    3分钟解决MySQL 1032主从错误 Part1:写在最前 1032错误----现在生产库中好多数据,在从库误删了,生产库更新后找不到了,现在主从不同步了,再跳过错误也没用,因为没这条,再更新还会报 ...

  5. 玲珑杯 1157 - 造物主的戒律 主席树+离散化

    题目链接:http://www.ifrog.cc/acm/problem/1157 1157 - 造物主的戒律 Time Limit:20s Memory Limit:512MByte Submiss ...

  6. 【Shell】fix 1032报错信息的脚本

     生产环境总会遇到由于各种原因导致的主从复制不一致的情况,导致slave出现 1032报错.为了使主从关系能够稳定的运行,大多时候可以选择修复1032 报错 ,先跳过去 ,然后使用 percona   ...

  7. PAT Basic 1032

    1032 挖掘机技术哪家强 (20 分) 为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 1 ...

  8. 最长回文子串 hihocode 1032 hdu 3068

    最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  9. PAT甲级1032 Sharing :[C++题解]链表

    文章目录 题目分析 题目链接 题目分析 思路:建立链表,这里使用数组.e [ ] 表示当前的数值,ne[ ]表示next指针. 求单词的公共后缀,就是求两个链表从头结点开始第一个公共的结点. 先遍历第 ...

最新文章

  1. c语言的求素数算法,C语言求素数的算法
  2. linux sersync2 ssh start=true,rsync+nfs+sersync实战案例
  3. C++Primer再学习(3)
  4. MyBatis + MyBatis Plus + MySQL——查询语句中字段名为MySQL关键字问题解决方案
  5. wxWidgets:wxMouseCaptureLostEvent类用法
  6. 安全测试的一些漏洞和测试方法
  7. 【正睿2021寒假省选第二轮集训 day 1】令牌生成 (组合数+二分)
  8. Java常用类(2)--日期时间相关类Date、Calendar、LocalDateTime、Instant全面
  9. 清空邮件队列中的邮件
  10. jQuery源码研究分析学习笔记-jQuery.buildFragment()(六)
  11. 使用爬虫刷blog访问量 随机代理IP 随机user_agent
  12. JAVA——利用wait和notify实现生产者和消费者
  13. Ubuntu18.04下NVIDIA CUDA安装指南和DeepLearning4J GPU配置
  14. 精通Hyperledger之Hyperledger composer建模语言(15)
  15. 三菱GXWorks2 变换梯形图
  16. 软考高级,信息系统项目管理师(高项)经验分享
  17. 检错纠错码(奇偶校验码 CRC循环冗余校验码 海明码)
  18. 孩子沉迷网游 呼唤亲子陪伴教育
  19. 刚性PCB和柔性PCB的区别
  20. IE8兼容性问题及解决方案

热门文章

  1. FT232RL-REEL全隔离原理图,带I/O保护,防电流倒灌等
  2. MYSQL数据库实验(用户与权限管理)
  3. 消息中间件之RabbitMq
  4. 读书笔记-全面薪酬体系设计“6+1”
  5. P2562kitty猫基因
  6. vp230引脚功能_正点原子阿波罗STM32F767
  7. 在你的项目中集成 Android pay支付
  8. 编译时多态、运行时多态
  9. el-tree 默认展开第一级节点
  10. 高项、高级项目管理师论文-进度管理