上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 14 下一页
摘要: 首先我们知道一维的时候,可以达到Q(N)的速度,那二维的时候,我们依然可以通过降维来引用1维的做法#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;int map[102][102];int main(){ int i,j,t,k,m,r,c,max,temp; scanf("%d",&t); while( 阅读全文
posted @ 2013-05-02 21:40 小仪在努力~ 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 这是个二维的矩阵,从原点到下一个点只有两个方向,从上到下、从左到右遍历不会产生冲突#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;int dp[30][30];//当前的位置最大和是多少int main(){ int n,m,i,j; while(~scanf("%d%d",&n,&m)) { m 阅读全文
posted @ 2013-05-02 20:51 小仪在努力~ 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 很简单的01背包:#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;int dp[30005];int main(){ int t,v,n,i,j,val,level; scanf("%d",&t); while(t--) { scanf("%d%d",&v,&n); m 阅读全文
posted @ 2013-05-02 18:28 小仪在努力~ 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 经典的数塔问题:#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;int dp[105][105];int main(){ int n,i,j; while(~scanf("%d",&n)) { memset(dp,0,sizeof(dp)); for(i=1;i<=n;++i) for(j=1;j& 阅读全文
posted @ 2013-05-02 16:17 小仪在努力~ 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 首先,我们把字符串反转,然后用反串和原串求最大公共子序列,再用字符串长度减去最大公共子序列的长度就是答案,我们还可以用滚动数组优化内存状态转移方程:(i长度的a串和j长度的b串的最长公共子序列长度) 1.dp[i-1][j-1]+1 a[i]=b[j]dp[i][j]= 2.max(dp[i][j-1],dp[i-1][j]) a[i]!=b[j]#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include&l 阅读全文
posted @ 2013-05-02 12:49 小仪在努力~ 阅读(185) 评论(0) 推荐(0) 编辑
摘要: #include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;int main(){ int t,n,i,a,sum,Max; scanf("%d&quo 阅读全文
posted @ 2013-05-01 22:21 小仪在努力~ 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 最长单调递减子序列#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;const int MAX=10010;int f[MAX],a[MAX];//f[i]表示i位置最多有多少个可以拦截的导弹int main(){ int t,n,i,j; scanf("%d",&t); while(t--) { scan 阅读全文
posted @ 2013-05-01 20:01 小仪在努力~ 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 很水的01背包,注意用条件表达式优化时间就好了#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;int t,n,dp[50003],v,mid_v,w[50003],i,j;int main(){ scanf("%d",&t); while(t--) { scanf("%d",& 阅读全文
posted @ 2013-05-01 17:21 小仪在努力~ 阅读(117) 评论(0) 推荐(0) 编辑
摘要: #include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;#define maxn 50005const int INF=0x80000000;//赋值int dp[maxn];int main(){ int c,w,n,v,t,i,j; scanf("%d",&t); while(t--) { scanf(&qu 阅读全文
posted @ 2013-05-01 15:29 小仪在努力~ 阅读(126) 评论(0) 推荐(0) 编辑
摘要: DP使用规则(摘抄自http://www.cnblogs.com/huangxincheng/archive/2012/02/13/2349664.html):① 最优化原理(最优子结构性质): 如果一个问题的最优策略它的子问题的策略也是最优的,则称该问题具有“最优子结构性质”。② 无后效性: 当一个问题被划分为多个决策阶段,那么前一个阶段的策略不会受到后一个阶段所做出策略的影响。③ 子问题的重叠性: 这个性质揭露了动态规划的本质,解决冗余问题,重复的子问题我们可以记录下来供后阶段决策时 直接使用,从而降低算法复杂度。求解步骤:① 描述最优解模型。② 递归的定义最优解,也就是构造动... 阅读全文
posted @ 2013-05-01 14:37 小仪在努力~ 阅读(586) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 14 下一页