2012年8月23日

NYOJ 451 光棍节的快乐 (组合数+全错位)

摘要: 地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=451思路:组合数+全错位全错排列问题,最早是由欧拉给出的答案.我们不妨设N个人的拿法为f(N),则f(N)=(N-1)[f(N-1)+f(N-2)].f(0)=0,f(1)=1.这个递推公式是很容易证明的.证明如下:设N个人为a,b,c,d...,N张卡为A,B,C,D...若a拿b的卡B,b也拿a的卡A,则显然只剩下N-2个人拿卡,自然是f(N-2)种了.若a拿b的卡B,b没拿a的卡A(与"b没拿b的卡B"相同),则显然与N-1个人拿卡一样,自然是f(N-1)种了.而 阅读全文

posted @ 2012-08-23 21:00 mycapple 阅读(376) 评论(0) 推荐(0) 编辑

NYOJ 469 擅长排列的小明 II (dp问题)

摘要: 地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=469思路:动态规划dp题目分析:由于第一个只能是1,则第二个数只能是2,3当第二个数是2时,则相当于是对2-n的排列,相当于对1-(n-1)的排列,即s[n-1];当第二个数是3时,第三个数只能是2,4,5此时,当第三个数为2时,则是对3-n的排列,相当于对1-(n-3)的排列,即s[n-3] 当第三个数为4时,此时,第四个数只能是2,除了n等于4时,对于n大于4的排列,都不符合要求, 而n为4时,与第三个数为5时的排列相同,所以, 可认为第三个数为4时不符合要求, 当第三个数... 阅读全文

posted @ 2012-08-23 19:20 mycapple 阅读(349) 评论(0) 推荐(0) 编辑

ACM进阶计划

摘要: ACM队不是为了一场比赛而存在的,为的是队员的整体提高。大学期间,ACM队队员必须要学好的课程有:lC/C++两种语言l高等数学l线性代数l数据结构l离散数学l数据库原理l操作系统原理l计算机组成原理l人工智能l编译原理l算法设计与分析除此之外,我希望你们能掌握一些其它的知识,因为知识都是相互联系,触类旁通的。以下学习计划每学期中的内容不分先后顺序,虽说是为立志于学习ACM的同学列的知识清单,但内容不限于ACM的知识。英语之类与专业相距较远的课程请自行分配时间,这里不再列举。大一上学期:必学:1.C语言基础语法必须全部学会a)推荐“语言入门”分类20道题以上b)提前完成C语言课程设计2.简单数 阅读全文

posted @ 2012-08-23 16:38 mycapple 阅读(945) 评论(0) 推荐(6) 编辑

NYOJ 91 阶乘之和 (经典贪心算法)

摘要: 地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=91思路:贪心,最大到最小依次加~~代码如下: 1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int m,n,i,aim; 6 int a[11]; 7 memset(a,0,sizeof(a)); 8 a[1]=1; 9 for(i=2;i<=10;i++) //计算阶乘 10 a[i]=a[i-1]*i;11 scanf("%d",&m);12 ... 阅读全文

posted @ 2012-08-23 16:17 mycapple 阅读(482) 评论(0) 推荐(0) 编辑

贪心算法精讲

摘要: 一.贪心算法的基本概念当一个问题具有最优子结构性质时,我们会想到用动态规划法去解它。但有时会有更简单有效的算法。我们来看一个找硬币的例子。假设有四种硬币,它们的面值分别为二角五分、一角、五分和一分。现在要找给某顾客六角三分钱。这时,我们会不假思索地拿出2个二角五分的硬币,1个一角的硬币和3个一分的硬币交给顾客。这种找硬币方法与其他的找法相比,所拿出的硬币个数是最少的。这里,我们下意识地使用了这样的找硬币算法:首先选出一个面值不超过六角三分的最大硬币,即二角五分;然后从六角三分中减去二角五分,剩下三角八分;再选出一个面值不超过三角八分的最大硬币,即又一个二角五分,如此一直做下去。这个找硬币的方法 阅读全文

posted @ 2012-08-23 15:19 mycapple 阅读(542) 评论(0) 推荐(0) 编辑

NYOJ 79 拦截导弹 (经典dp)

摘要: 地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=79思路:同NYOJ 17 单调递增最长子序列(经典dp)而本题区别是求最长递减子序列的长度,只需要改动a[i]与a[j]大小方向即可 动态规划法:O(n^2) 设f(i)表示L中以ai为末元素的最长递增子序列的长度。则有如下的递推方程: f(i)=max(f(i+1),f(i+2),...,f(L-1),f(L))+1;用一个int dp[i]数组保存当前的f(i)值,可想而知最后 *max_element(dp,dp+L) 便得到了答案 这个递推方程的意思是,在求以ai为末元素的... 阅读全文

posted @ 2012-08-23 12:04 mycapple 阅读(1590) 评论(0) 推荐(0) 编辑

删数问题(典型的贪心算法问题)

摘要: 题目:键盘输入一个高精度的正整数n(<=240位),去掉任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数最小。Simple Input1785434Simple Output13思路:每一步总是选择一个使剩下的数最小的数字删除,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字;否则删除第一个递减区间的首字符,这样删一位便形成了一个新的数字串。然后回到串首,按上述规则再删除下一个数字参考借鉴代码1如下: 1 #include<iostream> 2 #include<string> 3 using 阅读全文

posted @ 2012-08-23 11:58 mycapple 阅读(21243) 评论(2) 推荐(2) 编辑

POJ 1017 Packets (典型的贪心算法)

摘要: 地址:http://poj.org/problem?id=1017翻译:http://poj.grids.cn/practice/1017/思路:贪心算法 , 其实这道题的关键就是要解决2*2规格的。处理的时候要注意向上调整题目分析:有6*6规格的箱子和一大堆木块 用多少箱子可以把木块都装下先放大的6*6 5*5 4*4 都需要新开箱子 每4个3*3需要开个新箱子 算下剩多少2*2和1*1的 如果不够再开箱子如果一个箱子中放置了一个6*6的产品,则此箱子中无法放置其它产品;若放置一个5*5的产品,则此箱子中还可放置11个1*1的产品;若放4*4的产品,还可放5个2*2的产品。若放置3*3的产品 阅读全文

posted @ 2012-08-23 11:01 mycapple 阅读(1232) 评论(0) 推荐(0) 编辑

导航