DP的简单应用
Problem A:简单的图形覆盖
Time Limit:1000MS Memory Limit:65536K
Total Submit:201 Accepted:104
Description
有一个2*n的方格,要用若干个1*2的模块覆盖,模块可以横放,也可以竖放.问对于给定的n(n<=100),有多少种不同的覆盖方法.
Input
有多个测试用例,每个用例占一行,为一个正整数n
Output
对于每个测试用例,输出一行相应的结果
Sample Input
9
11
Sample Output
55
144
分析:
f(n)={ 1 n=1
2 n=2
f(n-1)+f(n-2) n>2
}
#include<stdio.h>
int A[];
int main()
{
int n,i;
while(scanf("%d",&n)!=EOF)
{
A[]=;A[]=;
if(n==||n==) printf("%d\n",A[]);
else
{
for(i=;i<n;i++)
A[i]=A[i-]+A[i-];
printf("%d\n",A[i]);
}
}
return ;
}
递归解决
#include <stdio.h>
#include <string.h>
int A[];
int f(int n)
{
memset(A,-,sizeof(A));
if (A[n]!=-) return A[n];
if(n==||n==)
{
A[n]=;
}
else
{
A[n]=f(n-)+f(n-); }
return A[n];
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",f(n));
}
return ;
}
Problem B:最大子段和
Time Limit:1000MS Memory Limit:65536K
Total Submit:574 Accepted:299
Description
有一组数,如-2 5 4 -3 7 的最大子段和是13, 是从5到7.
Input
第一行输入一个n(1〈 N〈=100 ) 表示这一组数有多长,第二行是N个数.
测试案例有多个,n=0时结束.
Output
输出这一组数的最大子段和.
Sample Input
5
-2 5 4 -3 7
10
9 -3 8 -28 98 -30 -20 50 -24 10
0
Sample Output
13
98
分析:
A
-2 |
5 |
4 |
-3 |
7 |
B 表示A0~Ai数段中包含第i个元素的最大子段和
-2 |
5 |
9 |
6 |
13 |
B[i]={
A[i] i=0;
max{ B[i-1]+A[i] , A[i] } i>0;
}
#include<stdio.h>
int A[];
int B[];
int main()
{
int n,i,max;
scanf("%d",&n);
while(n!=)
{
for(i=;i<n;i++)
scanf("%d",&A[i]);
B[]=A[];
for(i=;i<n;i++)
if(B[i-]<) B[i]=A[i];
else
B[i]=B[i-]+A[i];
/* max=B[0];
for(i=1;i<n;i++) if(max<B[i]) max=B[i];
printf("%d\n",max);
scanf("%d",&n);*/
printf("%d\n",B[n-]); }
return ;
}
Problem C:最长公共子序列
Time Limit:1000MS Memory Limit:65536K
Total Submit:164 Accepted:99
Description
我们称序列Z=是序列X=的子序列当且仅当存在严格上升的序列,使得对j=1,2,...k,有Xij=Zj.比如Z=<a,b,f,c>是X=<a,b,c,f,b,c>的子序列.现在给出两个序列X和Y,任务是找到X和Y的最大公共子序列,也就是说要找到一个最长的序列Z,使得Z既是X的子序列也是Y的子序列.
Input
输入包括多组测试数据.每组数据包括一行,给出两个长度不超过200的字符串,表示两个序列.两个字符串之间由若干个空格9开.
Output
对每组输入数据,输出一行,给出两个序列的最大公共子序列的长度.
Sample Input
abcfbc abfcab
programming contest
abcd mnp
Sample Output
4
2
0
分析
Z[i][j]= {
0 i=0或j=0;
Z[i-1][j-1]+1 X[i]=Y[j];
max{ Z[i-1][j] , Z[i][j-1] } X[i]!=Y[j]
}
下标 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
|
Z[i][j] |
a |
b |
c |
f |
b |
c |
||
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
1 |
a |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
2 |
b |
0 |
1 |
2 |
2 |
2 |
2 |
2 |
3 |
f |
0 |
1 |
2 |
2 |
3 |
3 |
3 |
4 |
c |
0 |
1 |
2 |
3 |
3 |
3 |
4 |
5 |
a |
0 |
1 |
2 |
3 |
3 |
3 |
4 |
6 |
b |
0 |
1 |
2 |
3 |
3 |
4 |
4 |
X,Y下标从0开始,Z[i][j] 下标有效的从1开始
#include<stdio.h>
#include<string.h>
char x[];
char y[];
int z[][];
int main()
{
int i,j,s,t,max;
while(scanf("%s%s",x,y)!=EOF)
{
s=strlen(x);t=strlen(y);
for(i=;i<s;i++)
z[i][]=;
for(j=;j<t;j++)
z[][j]=;
for(i=;i<=s;i++)
for(j=;j<=t;j++)
{
if(x[i-]==y[j-]) z[i][j]=z[i-][j-]+;
else
{
if(z[i-][j]>=z[i][j-]) z[i][j]=z[i-][j];
else z[i][j]=z[i][j-];
}
}
/* max=z[0][0];
for(i=0;i<=s;i++)
for(j=0;j<=t;j++)
if(z[i][j]>max) max=z[i][j];*/
printf("%d\n",z[s][t]);
} return ;
}
Problem D:最长上升子序列
Time Limit:1000MS Memory Limit:65536K
Total Submit:456 Accepted:239
Description
一个数的序列bi,当b1<=b2<=b3..<=bn的时候,称这个序列是上升的。对于给定的一个序列(A1,A2,....,AN),可以得到一些上升的子序列(AI1,AI2,....AIK,这里1<=I1<=I2<=....<=IK<=N,比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等.这些子序列中最长的长度是4,比如子序列(1,3,5,8).
你的任务就是对于给定的序列,求出最长上升子序列的长度.
Input
输入有多个案例,每个案例占两行:
第一行是序列的长度N(1<=N<=1000).第二行给出序列中的N个整数,这些整数的取值范围都在0到10000.
Output
最长上升子序列的长度.
Sample Input
7
1 7 3 5 9 4 8
2
1036 3
Sample Output
4
1
分析
设置b[N],b[i]表示序列的第1个数到第i个数(保留第i个数)的最长上升子序列的长度。
b[i]=max(b[j])+1(a[j]<a[i],1<=j<=i<=n)
如果a[i]最小,则b[i]=1
A |
1 |
7 |
3 |
5 |
9 |
4 |
8 |
B |
1 |
2 |
2 |
3 |
4 |
3 |
4 |
#include<stdio.h>
int A[],B[];
int main()
{
int n,i,j,max;
while(scanf("%d",&n)!=EOF)
{
for(i=;i<n;i++)
scanf("%d",&A[i]);
B[]=;
for(i=;i<n;i++)
{
max=;
for(j=;j<i;j++)
if(A[j]<A[i]&&B[j]>max)
max=B[j];
B[i]= max+;
}
max=B[];
for(i=;i<n;i++)
if(max<B[i]) max=B[i];
printf("%d\n",max);
}
return ;
}
DP的简单应用的更多相关文章
- ZOJ 4257 MostPowerful(状压DP,简单)
题目大意:不超过10种气体,两两之间相互碰撞可以产生一定的能量,如a碰b,那么b气体就消失,自身不能碰自身,问最后所能得到的最大能量. 原代码链接:http://blog.csdn.net/accry ...
- 数位dp 的简单入门
时间紧张,就不讲那么详细了. 之前一直被深搜代码误解,以为数位dp 其实就是记忆化深搜...(虽说爆搜确实很舒服而且还好想) 但是后来发现数位dp 的标准格式其实是 预处理 + dp ...... 数 ...
- 斜率优化dp 的简单入门
不想写什么详细的讲解了...而且也觉得自己很难写过某大佬(大米饼),于是建议把他的 blog 先看一遍,然后自己加了几道题目以及解析...顺便建议看看算法竞赛(蓝皮书)的 0x5A 斜率优化(P294 ...
- PKU 1458 Common Subsequence(最长公共子序列,dp,简单)
题目 同:ZJU 1733,HDU 1159 #include <stdio.h> #include <string.h> #include <algorithm> ...
- dp优化简单总结
1.二分优化 (使用二分查找优化查找效率) 典型例题:LIS dp[i]保存长度为 i 的上升子序列中最小的结尾,可以用二分查找优化到nlogn 2.数学优化 (通过数学结论减少状态数) 例题1:hd ...
- HDU 1024 Max Sum Plus Plus(DP的简单优化)
Problem Description Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To b ...
- dp的简单递推笔记1
(1)转自rockZ的博文 UVa 10328 - Coin Toss (递推) 题意:给你一个硬币,抛掷n次,问出现连续至少k个正面向上的情况有多少种. 原题中问出现连续至少k个H的情况,很难下手. ...
- 2017-5-14 湘潭市赛 Similar Subsequence 分析+四维dp+一些简单优化
Similar Subsequence Accepted : Submit : Time Limit : MS Memory Limit : KB Similar Subsequence For gi ...
- 树形DP(简单题)(Y HDU4705)
题意:给出一个n个节点的树形图,统计{A,B,C}的数量,其中ABC分别是树上三个不同的节点,并且这三个节点不能被一条路径覆盖 分析:对于下图 进行dfs深搜统计,num[u]统计回溯到当前节点u,并 ...
随机推荐
- C#事件解析
事件(event),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂.而这些东西却往往又是编程中常用且非常重要的东西.大家都知道windows消息处理机制的重要,其实C#事件就是基于window ...
- Article Master Data Deviation
Site data – Logistics DC / Logistics Store Where is the reference site decided when you maintain the ...
- PHP json_encode中日语问题
<?php header('Content-type:text/html;charset=utf-8'); $s = array('message'=>'4月以降.遺体の捜索活動が続けられ ...
- Laravel框架数据库CURD操作、连贯操作总结
这篇文章主要介绍了Laravel框架数据库CURD操作.连贯操作.链式操作总结,本文包含大量数据库操作常用方法,需要的朋友可以参考下 一.Selects 检索表中的所有行 复制代码代码如下: $use ...
- 用JS写的放大镜
代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...
- CentOS6.5 MySQL 配置设置总结笔记
三.登录MySQL 登录MySQL的命令是mysql, mysql 的使用语法如下: mysql [-u username] [-h host] [-p[password]] [dbname] u ...
- phpcms v9 打开网站特别慢 增加数据库缓存方法
SET GLOBAL QUERY_CACHE_SIZE=80000000; 设置好查询缓存的大小就行了.比如设置个20MB.SET GLOBAL QUERY_CACHE_SIZE=20000000; ...
- Linux编程学习笔记 -- Process
进程是一个程序的运行. 在一个程序中执行另一个执程序的方法有两种: 1)system 在shell中执行程序 2)fork + exec 复制一个进程,在进程中用新的程序替换原有的程序 for ...
- JavaScript之this,new,delete,call,apply
OS:Window 8.1 关键字:JavaScript,HTML,this,new,delete,call,apply. 1.this 一般而言,在Javascript中,this指向函数执行时的当 ...
- AWS--EC2基本概念
原文:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html EC2:Elastic Compute Cloud 特性包括: ...