HDU ACM组队安排 [基础DP+打表]

HDU-计算机学院大学生程序设计竞赛(2015’11)1005 ACM组队安排(排列组合) n个人中有i个人一人一组,2*j个人两人一组,3*k个人三人一组(i+2*j+3*k=n),枚举i,j,k,用排列组合公式直接算结果即可 幸亏还记得点高中数学:无序地将mn分成m等份=[C(mn,2)*C(mn-2,2)*...*C(2,2)]/A(m,m) 计算公式:f[n]=∑{ com(n,i)*com(n-i,j*2)*equa(j*2,2)/fac[j]*equa(k*3,3)/fac[k] },(i+2*j+3*k=n) 一人一组:com(n,i) 从n个人中选i个人 两人一组:com(n 阅读详情

Problem Description
  ACM亚洲区比赛结束,意味着开始备战明年的浙江省大学生程序设计竞赛了!
  杭州电子科技大学ACM集训队也准备开始组队。
  教练想把所有的n个队员组成若干支队伍,原则是每支队伍至少一人,最多三人。
  现在问题来了:如果已知集训队队员的数量n,请你帮教练计算出所有可能的组队方案有多少种。

  特别说明:
  队伍没有编号,即如果有A,B,C三人,{A}{BC}与{BC}{A}是同一种组队情况。
 

Input
输入包含多组测试数据(约1000组),每组数据占一行,包含一个数字n(0<=n<=20),表示ACM集训队的队员人数;n为0,表示输入结束。
 

Output
请输出n个队员所有可能的组队方案数,每组输出占一行。
 

Sample Input
1 2 3 4 5 0
 

Sample Output
1 2 5 14 46
 


解法:

首先看到N小于20,嗯,是否能打表,然后发现可以DP,DP[i][J][K][L] 表示前I个人,三个人一组的有J组,两个人一组的有K组,一个人一组的有L个的方案数。

转移方程看代码吧,比较简单。


打表代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<iostream>
#include<stdlib.h>
#include<set>
#include<map>
#include<queue>
#include<vector>
#include<bitset>
#pragma comment(linker, "/STACK:1024000000,1024000000")
template <class T>
bool scanff(T &ret){ //Faster Input
    char c; int sgn; T bit=0.1;
    if(c=getchar(),c==EOF) return 0;
    while(c!='-'&&c!='.'&&(c<'0'||c>'9')) c=getchar();
    sgn=(c=='-')?-1:1;
    ret=(c=='-')?0:(c-'0');
    while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
    if(c==' '||c=='\n'){ ret*=sgn; return 1; }
    while(c=getchar(),c>='0'&&c<='9') ret+=(c-'0')*bit,bit/=10;
    ret*=sgn;
    return 1;
}
#define inf 1073741823
#define llinf 4611686018427387903LL
#define PI acos(-1.0)
#define lth (th<<1)
#define rth (th<<1|1)
#define rep(i,a,b) for(int i=int(a);i<=int(b);i++)
#define drep(i,a,b) for(int i=int(a);i>=int(b);i--)
#define gson(i,root) for(int i=ptx[root];~i;i=ed[i].next)
#define tdata int testnum;scanff(testnum);for(int cas=1;cas<=testnum;cas++)
#define mem(x,val) memset(x,val,sizeof(x))
#define mkp(a,b) make_pair(a,b)
#define findx(x) lower_bound(b+1,b+1+bn,x)-b
#define pb(x) push_back(x)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;




ll f[22][22][22][22];
int main(){
    rep(n,1,20){
    mem(f,0);
    f[0][0][0][0]=1;
    rep(i,0,n-1){
        rep(j,0,n){
            rep(k,0,n){
                rep(l,0,n){
                    f[i+1][j][k][l+1]+=f[i][j][k][l]; //这个人作为一个人一组
                    if(l>0)f[i+1][j][k+1][l-1]+=l*f[i][j][k][l]; //这个人选一个前面一个人一组的组成二人组
                    if(k>0)f[i+1][j+1][k-1][l]+=k*f[i][j][k][l];//选一个二人组组成一个三人组
                }
            }
        }
    }
    ll ans=0;
    rep(j,0,n){
            rep(k,0,n){
                rep(l,0,n){
                    ans+=f[n][j][k][l];
                }
            }
        }
        printf("a[%d]=%lldLL;\n",n,ans);
    }
    return 0;
}

ubuntu 18.04 + Kimera slam 安装与demo测试 环境:opencv 3.4.12,其他的都是按照文档下载的。 首先进行组件的安装 一、Kimera-VIO 安装参考文档:https://github.com/MIT-SPARK/Kimera-VIO/blob/master/docs/kimera_vio_install.md 按照文档装就好,在安装过程中碰到如下问题: 0、make 过程很卡,不要用所有的核 1、cmake过程中卡下载 ORBvoc.zip ,手动下载这个文件,解压,将里面的3个文件,放到/Kimera-VIO/vocabu. 阅读详情

相关推荐

java modbus通讯协议_Modbus通 讯 协 议

电磁流量计Modbus通 讯 协 议(版本号:9000-K V9.1.1)2020年01月01日通讯协议针对KFD电磁流量计工业应用设计,版本:9000-K V9.1.1,该版本主要用于实时数据采集、流量测量、流量累计控制及部分参数的修改。一、主机系统通讯部件要求1.国际标准RS-485通讯接口部件,不小于11Bytes 的通信缓冲区(FIFO),支持1200、2400、4800、96...

weixin_39956612的博客 1010

1.6.2 ACM-ICPC技巧 分段打表

分段打表是一种预处理技巧,主要用于解决那些直接计算非常耗时,但结果又可以预先计算并存储起来供后续直接查询的问题。通过将大规模的数据预先计算并分段存储,可以在实际解题时快速查询结果,从而减少整体的计算量。在ACM-ICPC等高水平编程竞赛中,参赛者常常面临需要高效处理大量数据的挑战。为了应对这类挑战,分段打表技巧应运而生,它是在传统打表方法基础上的一种优化,能够显著提高处理大数据量问题的效率。本节将结合博客中的相关知识,详细探讨分段打表技巧及其应用。

tang7mj的博客 985

html2canvas 返回的toDataURL()数据为 data:,的解决方法

html2canvas 返回的toDataURL()数据为 data:,的解决方法 我在使用html2canvas的使用, 发现toDataURL() 返回的数据为data:, 而且将数据设置为img的src属性,图片也不能正常显示,我尝试了很多方法,也没有解决出来,经过我不断的百度+自己尝试,终于解决了这个问题。 代码: 这段代码是没有任何问题的,标准html2canvas的demod代码,但就是无法正常将图片previewImg 渲染出来,dataURL 我打印的结果为 data:, 错误的原因是,

java123_PB的博客 5024

ACM -- 算法小结(十)素数的两种打表法

素数的两种打表法 下面介绍两种素数打表法,由于是两年前留下的笔记,所以没有原创链接~~ @_@!! 第一种疯狂打表法: 1 #include<stdio.h> 2 #include<math.h> 3 4 #define N 100000 5 6 int a[N]; 7 int s1[100000]; 8 ...

aijie6150的博客 426

关于旋转矩阵的左乘与右乘问题

最近在阅读框架源码时被旋转矩阵左乘右乘绕的云里雾里,故写下一篇记录一下,以防自己不长记性。

菜鸡正在学习 1万+

SAP生产版本导入避坑大全:从‘黄灯’到‘绿灯’,详解CM_FV_MKAL_CONSISTENCY_CHECK检查函数

本文深入解析SAP生产版本导入过程中的常见问题,特别是通过`CM_FV_MKAL_CONSISTENCY_CHECK`检查函数从‘黄灯’异常到‘绿灯’正常的修复方法。涵盖静态与动态校验机制、典型异常场景诊断及批量导入最佳实践,帮助SAP运维人员高效解决生产版本管理难题。

weixin_30568591的博客 387

acm-(思维、找规律、打表)Codeforces Round #676 (Div. 2) E. Swedish Heroes

传送门 首先答案一定是∑i=1nbiai,(bi=−1,1)\sum_{i=1}^nb_ia_i,(b_i=-1,1)∑i=1n​bi​ai​,(bi​=−1,1)。 我们考虑最终的答案中的{bi}\{b_i\}{bi​}序列有何性质,假设其中−1-1−1有xxx个,111有yyy个,那么满足(2x+y)%3=1(2x+y)\%3=1(2x+y)%3=1。 这个可以通过打表看出(我其实看不出 ),这里给出一个证明: 利用数学归纳法来证明,每次我们都会合并两个序列,考虑两个序列的性质,若两个序列都满足(2x.

qq_30361651的博客 269

QKD(量子密钥分发)

量子密钥分发(Quantum Key Distribution,QKD)是一种基于量子力学原理的安全通信协议,它允许两个用户通过不安全的通信信道创建并共享一个安全的密钥。这个密钥随后可以用于加密和解密信息,确保通信的机密性。QKD的核心原理是量子不可克隆定理和量子测量的不确定性。

qq_40844444的博客 2896

退役了,总结的ACM近年区域赛的所有题型

主要就是2020年,2021年icpc和ccpc大多场次的银之前的题的题型,可以自己看下区域赛常考的的题的类型,当然自己也可以总结下22年的题型。

hjc的博客 5732

基于EKF的UWB-IMU融合定位系统在农业机器人中的抗干扰优化与Matlab仿真

本文探讨了基于扩展卡尔曼滤波(EKF)的UWB-IMU传感器融合定位系统在农业机器人中的应用。通过Matlab仿真验证,该系统有效解决了农业环境中UWB信号遮挡和IMU累积误差问题,实现了厘米级高精度定位,显著提升了机器人在复杂场景下的抗干扰能力和导航可靠性。

numpy6sculptor的博客 622

SPICE仿真软件:PSpice_(10).噪声分析

噪声分析是电路设计和优化中的一个重要工具,特别是在低噪声放大器、传感器电路和通信电路中。通过准确设置噪声源和仿真参数,合理选择频率范围,并验证仿真结果,可以有效地评估和优化电路的噪声性能。PSpice提供的噪声分析功能强大且灵活,能够帮助工程师和研究人员在多种应用场景下进行详细的噪声分析。

kkchenjj的博客 1535

HDU6222(acm2017-沈阳) 打表递推

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6222 题目大意: 寻找大于n的最小数t 使得t-1,t,t+1这三个数构成的三角形为整数 n 思路: 看到n这么大,显然是瞎jiba找规律然后打表? 1.首先打表,打出所有的满足条件的t; 2.然后我们美滋滋的发现了规律; 3.按得出的递推式构造出10^30以

WJHKDGHP的博客 1022

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【UVA】12034-Race(递推,组合数打表)

递推公式,假设第一名有i个人并列,那么: f[n] = C(n,i) * f[n - i]; 打出1 ~ 1000的所有组合数,之后记忆化搜索,需要打表。 14026995 12034 Race Accepted C++ 0.032 2014-08-12 11:47:47 #include #include #incl

花月阁 856

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

组合数打表

代码:   #include #include using namespace std; int c[11][11]; void init() { memset(c,0,sizeof(c)); c[1][0]=c[1][1]=1; for(int i=2;i<=10;i++) { c[i][0]=c[i][i]=1

逆风的方向 更适合飞翔 2803

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

acm-(打表、找规律)2018-2019 ACM-ICPC, Asia Nanjing Regional Contest G.Pyramid

传送门 本题考虑打表找规律,打表程序很好写,暴力枚举三角形的三个点即可。 然后打出前面几项:1、5、15、35、70、126、210、330...1、5、15、35、70、126、210、330...1、5、15、35、70、126、210、330... 貌似没什么规律,考虑对前后两项作除法,得到51,31,73,21,95,53...\frac 51,\frac 31,\frac 73,\frac 2 1,\frac 95,\frac 53...15​,13​,37​,12​,59​,35​... 乍..

qq_30361651的博客 591

ACM素数打表(模版)

第一次写博客。 今天学了两个很简单的定理,老是忘记细看,今天可算看了下。 其中一个是 素数打表的优化 首先先理解了简单的埃筛法; 埃筛法就是把表中全部数为素数的倍数一个个筛除,最后只有素数留在表中。 #include&lt;cstdio&gt; #include&lt;cstring&gt; using namespace std; #define maxn 100000 int c...

Doneone_的博客 2127

ACM日记_17.3.27——素数打表还不会?等等,先弄明白到底什么是打表!

说到素数咱们就不得不说说筛法打素数表啦。代码很经典也很易懂,就是排除。 下面给出一种实现:void prime_table() { is_Prime[1] = 1; for(int i = 2;i<sqrt(N);++i) { if(!is_Prime[i]) { for(int j = i*i;j<N;j+=i) { is_Prime[j] = 1;

A Light Clean Place 849

ACM--打表--HDOJ 1999--不可摸数

HDOJ题目地址:传送门 不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11307    Accepted Submission(s): 2951 Problem Description s(n)是正

戎码人生 5054

ACM学习计划

看完人家的博客,发现任重道远。。。 一位高手对我的建议: 一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功.acm主要是考算法的 ,主要时间是花在思考算法上,不是花在写程序与debug上。  下面给个计划你练练: 第一阶段: 练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都

DM & ML 7397

数位DP(组合数打表)—— Round Numbers ( POJ 3252 )

题目链接: http://poj.org/problem?id=3252 分析: 求出S~F中转换成二进制数后0的个数≥1的个数的数字的个数。0的个数大于1的个数的数可以用组合数来做。 题解:算出1~F+1和1~S的满足条件的个数相减即可。 先一个数转换乘二进制形式存入数组中: void change(int n) { number[0]=0; //nubmer[0]用来

FeBr2的博客 549

HDU - 2519 新生晚会 组合数打表

打表 #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const int maxn = 1000000, I

床前明月光 376

打表

作为一名ACM新手,每一天上课的收获都是很令人开心的,今天第一个收获就是打表,首先是打素数表,也就是素数筛法。就拿求1到100之内的素数为例,我们先开一个大小比上限稍大的一维数组val[i]来表示“i”这个数的状态,并将数组全部初始化为状态1,然后我们知道2是最小的素数,那么我们就把所有小于100000且为2的倍数的状态改为0,然后进入循环i++,如果val[i]=1;则将它所有倍数标记为状态0,

xxx 1585

ACM:素数线性筛法(素数打表)

通过一道题来讲一下素数筛法。 (我理解的素数筛法。。不一定对) 原题: https://vjudge.net/contest/205544#problem/H 题目在文章末尾。 在此之前可以先看一篇博客,原文的地址不知道为啥打不开了..网上有很多转载的,以下是一个转载的地址: http://blog.youkuaiyun.com/net_assassin/article/details/89605...

cccccccj 2万+

组合数打表 模版

//组合数打表模板,适用于N<=3000 //c[i][j]表示从i个中选j个的选法。 long long C[N][N]; void table_C(int maxn) { C[0][0] = 1; for(int i = 1; i <= maxn; i++) { C[i][0] = 1; for(int j = 1; j <...

Error Man 的博客 388

hdu--2089(打表)

不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 29250 Accepted Submission(s): 10275 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。

oliver233的博客 376

ACM找规律(附加打表和计算系数代码)

找规律的题目主要分为两大类 找规律的题目主要分为两大类没有参照的找规律2018南京ICPC G 题有参照的找规律 没有参照的找规律 2018南京ICPC G 题 写出暴力程序,发现相邻项之间做除法好像有某种规律,给所有的ans都乘上24发现是相邻的四项的乘积 #include <bits/stdc++.h> using namespace std; struct x{ double x,y; }d[100000]; int cnt = 0; double esp = 1e-4; doub

qq_45673816的博客 419
上一篇: HDU 逆袭指数 [暴力]
下一篇: ZOJ 3329 One Person Game [概率DP]
GrassTreeFlower
博客等级 码龄11年 14粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值