"下沙野骆驼"ACM夏令营
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 833 Accepted Submission(s): 403
事实表明。这项措施的效果还是非常明显的。如今坚持參加训练的学生比曾经有了较大幅度的增长。总体水平也有了较大的提高。
为了更好的促进这项竞赛的发展。计算机学院又有了新的计划:准备在每年的暑假举行一个为期半个月的程序设计夏令营活动,活动的全称是“下沙野骆驼ACM夏令营”,准备邀请全球的编程高手共同训练,邀请对象当然少不了HFUT的DYGG,NIT的DGMM,ZJUT的QWDD,假设QH的LTC一定要来,我们也不会嫌弃,尽管他水平比其它人差了些。毕竟是杭州人,要给点面子的。再说,共同进步才是我们的终于目的,呵呵。
活动的安排初步定为7项内容,详细是:
1、第一天,倒时差(主要照应欧美的选手)。
2、第二天。參观杭电校园,并在參观结束举行有奖竞答。偷偷透露一下。题目我已经设计好了:“杭电校院一共同拥有几棵树?”(正确答案:3897棵)。答对的营员奖励雪糕一支(不是哈根达斯,是杭州五丰生产的,民族工业还是要支持的)。
3、第三天,參观杭电ACMer的寝室,主要目的是让部分来自资本主义国家的选手看看我们是怎样管理学生宿舍的,当中一项重要内容是向全球推广我校首创的“党员榜样寝室”。
4、第四天。练习赛。题目仅仅有一个:“非著名高校HD一共同拥有教职工num个,分布在X个部门,如果每一个部门有y1个正处级领导,y2个副处级领导,y3个付处级调研员,y4个正科级干部,y5个副科级干部,请输出HD的领导人员占教职工总数的比例,结果保留两位小数。”(告诉你,这个题目对于欧美选手来说有个陷阱,最后的结果可能大于100%!这是他们怎样也想不到的:)
5、第五天~第十三天,算法交流,主要讨论怎样求两个数的最小公倍数。
6、第十四天。自由组队(每队人数不限,呵呵。注意了),參加“下沙野骆驼杯”程序设计大赛,冠军将获得一匹下沙的野骆驼(我们主场不知道有没有机会...)
7、最后一天。篝火晚会,主题:“ACM,你究竟爱不爱我?!”。主持人:骆驼王子和他一个普通老同学。
负责这次夏令营活动的是05级的小师弟Linle(一个打字速度非常快,号称仅次于Fe(OH)2的小伙子),他非常聪明,也非常勤奋,如今他就在思考一个问题。假设一共来了n个同学,依照组队规则,一共会有多少种不同的组队方案呢?
3 1 2 3
1 2 5
题意:求n个人组队的全部不同方式,如3个人a,b,c,能够组成:{a,b,c},{ab,c},{ac,b},{bc,a},{abc}5种方式。
解题思路:易知2个人能够组成{a,b}{ab}2种方式;
1、添加的一人单独一队,则原来的方法数目不变,队伍数目都+1,dp[i][j]=dp[i-1][j-1];
2、保持队伍数目不变。把这个人c添加到每种组队方式的任一队伍中,则队伍变成了{ac,b},{a,bc},{abc},添加3种,dp[i][j]=dp[i-1][j]*j;
则能够用dp[i][j]表示 i个人分成j组队的方案数,dp[i][j]=dp[i-1][j-1]+dp[i-1][j]*j;
#include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h> #include<algorithm> #include<vector> using namespace std; #define LL __int64 #define N 26 const int inf=0x1f1f1f1f; LL dp[N][N]; LL f[N]; void inti() { int i,j; memset(dp,0,sizeof(dp)); memset(f,0,sizeof(f)); dp[1][1]=f[1]=1; for(i=2;i<N;i++) { for(j=1;j<=i;j++) { dp[i][j]=dp[i-1][j-1]+dp[i-1][j]*j; f[i]+=dp[i][j]; } } } int main() { int c,n,i,j; inti(); scanf("%d",&c); while(c--) { scanf("%d",&n); printf("%I64d ",f[n]); } return 0; }