- 博客(8)
- 收藏
- 关注
原创 poj1458 Common Subsequence 最长公共序列 解题报告(附详细分析)
这道题是动态规划的典型题目。 动态方程: if(str1[i] == str2[j]) MaxLen[i][j] = MaxLen[i-1][j-1] + 1; //比较到两个字母相同时,把前一状态的值加1就得到当前的最长公共序列 else MaxLen[i][j] = max(MaxLen[i][j-1], MaxLen[i-1][j]); //比较到两个字母不同时,分别将两个字符
2013-11-27 22:05:36 702
原创 POJ 1631 Bridging signals 解题报告(附详细分析)最长上升子序列的dp+二分
这道题是最长上升子序列的问题。 常规思路是用动态规划,时间复杂度是n ^ 2,结果会超时。 思路: input 1 7 3 5 9 4 8 dp[1]=1; 因为7>1 dp[2]=dp[1]+1=2; 因为3>1, 3<7, dp[3]=dp[1]+1=2; 因为5>3, 5 dp[4]=dp[3]+1=3; 因为9>5, dp[5]=dp[4]+1=4; 因为43
2013-11-26 23:02:19 766
原创 动态规划Always On the Run poj 1476解题报告(附详细分析)
这道是动态规划,动态方程不难想,只是要实现数据的录入需要一些技巧。 以第i次飞行和第m个城市作为状态dp 动态转移方程:dp[i][m] = min {dp[i][m] ,,dp[i-1][j]+map[j][m][p]} 其中的map[i][k][p]是指第j城市到第k城市的第p个航班的费用,具体看代码和注释。 #include using namespace std; const
2013-11-23 11:39:03 1215
原创 poj 1338 ugly numbers和poj 2247Humble Numbers 解题报告(附详细分析)
题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=1338 最直观的思路是验证每个数是否是ugly number,但是很费时间,效率低。 于是,我们需要从另一个角度思考,把1500个ugly number存在一个数组里。需要时直接调用。 思路:ugly number都是由2,3或5相乘得到, 1 2=2*1 3=3*1 4=2*2
2013-11-18 16:02:44 1201
原创 ACM常用素数判断筛选法及其优化
一般的求解n以内素数的算法 #include #include #define N 10000 int prime[N+1]; int main() { int i, j, num = 0; for(i=2; i<N; i++) { for(j=2; j<=sqrt(i); j++) if( j%i==0 ) break; if( j>sqrt(
2013-11-16 13:28:30 1228
原创 水题poj1423 解题报告
poj1423是一道纯数学题目,原题的意思是输入一个数1 这道题目的数据庞大,达10^7,高精度模拟显然不行。因此n我们必须另外想方法。 要知道一个数字的位数是多少,我们可以用log10函数求得。例如,对于一个数,N=10,10!=3628800,而log10(3628800)=6.559763033,那么只要将这个数向上取整,就是7,就是10!的位数。 于是我们可以得到
2013-11-11 22:22:22 678
原创 插入排序算法
直接插入排序实例,在例子中理解算法思想比较具体,容易理解,比起直接看文字表达效果好。 递增排序 对有6个元素的数组进行排序 #include using namespace std; int main() { int A[6]; for(int i = 0; i < 6; i++) cin >> A[i]; for(int j = 1; j //设定插入的
2013-11-08 23:29:32 598
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人