2012年8月17日

NYOJ 311 完全背包 (dp)

摘要: 地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=311思路:dp问题,同NYOJ 289 苹果问题,在此基础上改动即可AC,至于除dp[0]为0外全部初始化为负无穷,不太明白为啥要初始化负无穷。。。在思考。。。代码如下: 1 #include <stdio.h> 2 #include <string.h> 3 #define N 100001 4 int dp[50001]; 5 int c[N],w[N]; 6 int max(int x,int y) 7 { 8 return x>y?x:y; 9 }10 阅读全文

posted @ 2012-08-17 21:29 mycapple 阅读(285) 评论(0) 推荐(0) 编辑

NYOJ 37 回文字符串 (dp)

摘要: 地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=37思路1:dp动态规划分析:d[i][j]表示从第 i 到第 j 的最优解;if(a[i]==a[j]) d[i][j]=d[i+1][j-1];d[i][j]=max{d[i][j] , d[i+1][j]+1 , d[i][j-1]+1};代码如下: 1 #include<stdio.h> 2 #include<string.h> 3 #define N 1010 4 int d[N][N]; 5 char a[N]; 6 int min(int x,int y 阅读全文

posted @ 2012-08-17 19:53 mycapple 阅读(466) 评论(0) 推荐(0) 编辑

NYOJ 289 苹果 (dp问题之01背包)

摘要: 地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=289思路:同NYOJ 49 开心的小明 动态规划问题dp代码如下: 1 #include <stdio.h> 2 #include <string.h> 3 #define N 1001 4 int dp[N]; 5 int c[N],w[N]; 6 int max(int x,int y) 7 { 8 return x>y?x:y; 9 }10 int main()11 {12 int n,v,i,j;13 while (scanf("%d%d&q 阅读全文

posted @ 2012-08-17 19:17 mycapple 阅读(333) 评论(0) 推荐(0) 编辑

NYOJ 36 最长公共子序列

摘要: 地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=36思路:dp[i][j]表示 s1 以 i结尾和 s2 以 j 结尾的最长公共子序列长度;if(i==0||j==0) dp[i][j]=0;if(s1[i]==s2[j])dp[i][j]=dp[i-1][j-1]+1else dp[i][j]=max(dp[i][j-1],dp[i-1][j]);代码如下: 1 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 int dp 阅读全文

posted @ 2012-08-17 17:56 mycapple 阅读(255) 评论(0) 推荐(0) 编辑

01背包问题总结(一)

摘要: 01背包问题总结一 问题描述:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 所谓01背包,表示每一个物品只有一个,要么装入,要么不装入。二 解决方案: 考虑使用dp问题 求解,定义一个递归式 opt[i][v] 表示前i个物品,在背包容量大小为v的情况下,最大的装载量。 opt[i][v] =max(opt[i-1][v] , opt[i-1][v-c[i]] + w[i])解释如下: opt[i-1][v] 表示第i件物品不装入背包中,而opt[i-1][v-c[i]] + w[i] 表示第i件物品装入背包中。 花费如下 阅读全文

posted @ 2012-08-17 15:26 mycapple 阅读(237) 评论(0) 推荐(0) 编辑

动态规划(基础篇)

摘要: 1.什么是动态规划:动态规划,和分治法一样,是通过组合子问题的解而解决整个问题的。但不同的是,分治算法是指将问题划分成一些独立的子问题,递归求解各子问题,然后合并子问题的解而得到原问题的解。而动态规划适用于子问题不是独立的情况,也就是各子问题包含公共的子子问题。动态规划对每个子子问题只求解一次,将其结果保存在一张表中,从而避免每次遇到各个子问题时重新计算答案。2.动态规划中的几个重要性质:2.1最优子结构:用动态规划求最优化问题的第一步是描述最优解的结构。如果问题的一个最优解中包含子问题的最优解,则该问题具有最优子结构。当一个问题具有最优子结构时,提示我们动态规划可能会适用(注意,在这种情况下 阅读全文

posted @ 2012-08-17 15:25 mycapple 阅读(259) 评论(0) 推荐(0) 编辑

NYOJ 558 一二三

摘要: 地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=558 1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int n,m; 6 char a[6]; 7 scanf("%d",&n); 8 while(n--) 9 {10 scanf("%s",a); 11 m=strlen(a);12 if(m==3)13 {14 if((a[0]=='o'... 阅读全文

posted @ 2012-08-17 10:15 mycapple 阅读(208) 评论(0) 推荐(0) 编辑

NYOJ 117 求逆序数 (归并排序)

摘要: 地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=117思路:归并排序,表示不太懂。。。。算法分析:这个题的算法是利用归并排序的 merge() 函数,在处理在处理两段时,恰好要比较大小,顺便把逆数也求出来 故时间复杂度o(nlogn); 1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 1000010 4 long long ans; 5 int a[N]; 6 void merge(int s1,int e1,int s2,int e2) 7 { 8 int 阅读全文

posted @ 2012-08-17 09:39 mycapple 阅读(1115) 评论(0) 推荐(0) 编辑

导航