简单DP
其中,蜂房的结构如下所示。
Output对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。
Sample Input
2
1 2
3 6
Sample Output
1
3 解题思路:从1-2有1种方法,从1-3可以由1-3或1-2-3,总共2种,由1-4可由1-2-3-4或1-3-4或1-2-4总共3种,可以这样想:想到达4必需到达3或2,然后计算到达3或2的所有路线,加起来就是所有的
路线数,得到递推公式 f(4)=f(3)+f(2);由此可以想到斐波那契数列,不过此题还要注意数据量的大小,每次打表都要注意。
#include<stdio.h>
#define LL long long int
LL dp[];
int main()
{
LL t,i,a,b,ans;
dp[]=;
dp[]=;
for(i=;i<=;i++)
{
dp[i]=dp[i-]+dp[i-];
}
scanf("%lld",&t);
while(t--)
{
scanf("%lld%lld",&a,&b);
ans=dp[b-a+];
printf("%lld\n",ans);
}
return ;
}
2.阿牛和EOF牛肉干
你,NEW ACMer,EOF的崇拜者,能帮阿牛算一下一共有多少种满足要求的不同的字符串吗?
PS: 阿牛还有一个小秘密,就是准备把这个刻有 EOF的牛肉干,作为神秘礼物献给杭电五十周年校庆,可以想象,当校长接过这块牛肉干的时候该有多高兴!这里,请允许我代表杭电的ACMer向阿牛表示感谢!
再次感谢!
Output对于每个测试实例,请输出全部的满足要求的涂法,每个实例的输出占一行。
Sample Input
1
2
Sample Output
3
8 解题思路:这道题师哥作为一道例题来给我们讲,他使用的是二维DP,使用一个二维数组,第一个参数代表动态规划进行到的阶段,第二个参数代表动态规划进行的状态,在这里我们划分了3个状态,分别
是字符为E、O、F。E和F之前的字符可以是E、F、O,而O由于条件的限制不能重复出现,所以关于O的递推公式需要单独拿出来写,O之前只能出现E、F。
#include<stdio.h>
#define LL long long int
LL dp[][];
LL ans[];
int main()
{
LL n,i;
dp[][]=;///
dp[][]=;///E
dp[][]=;///F
ans[]=;
for(i=;i<;i++)
{
dp[i][]=dp[i-][]+dp[i-][];///O不能出现重复,之前的字母只能是E或者F
dp[i][]=dp[i-][]+dp[i-][]+dp[i-][];
dp[i][]=dp[i-][]+dp[i-][]+dp[i-][];
ans[i]=dp[i][]+dp[i][]+dp[i][];
}
while(scanf("%lld",&n)!=EOF)
{
printf("%lld\n",ans[n]);
}
return ;
}
一维DP:最后一个字符只可能有三种情况:E,F,O;最后总的涂法为F(n);当是E的时候倒数第二个字符可以随便涂,因而为此涂法数为:F(n-1);当是F的时候倒数第二个字符也可以随便涂,因而为此涂法数也为:F(n-1);当是O的时候,倒数第二个字符不能随便了,因为连续的2个O是不符合要求的,因此O的时候又被分为二种情况为E或F。在最后2个字符为EO的情况下,倒数第三个字符可以随便,因此此涂法为F(n-2);在最后2个字符为FO的情况下,倒数第三个字符也可以随便,因此此涂法也为F(n-2);此时已经讲所有的情况考虑完毕,F(n)=2*F(n-1)+2*F(n-2);
dp[]=;
dp[]=;
for(i=; i<; i++)
{
dp[i]=*dp[i-]+*dp[i-];
}
3.数塔
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
已经告诉你了,这是个DP的题目,你能AC吗?
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
#include<string.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int t,n,i,j;
int a[][];
int dp[][];
scanf("%d",&t);
while(t--)
{
memset(dp,,sizeof(dp));
memset(a,,sizeof(a));
scanf("%d",&n);
for(i=; i<=n; i++)
{
for(j=; j<=i; j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=; i<=n; i++)
{
dp[n][i]=a[n][i];
}
for(i=n-; i>=; i--)
{
for(j=; j<=i; j++)
{
dp[i][j]=max(dp[i+][j],dp[i+][j+]);
dp[i][j]=dp[i][j]+a[i][j];
}
}
printf("%d\n",dp[][]);
}
return ;
}
Output对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。
Sample Input
2
1
2
Sample Output
2
7
解题思路:
对n取任意值时,分割平面数= 交点数 + 顶点数 + 1,我们假设f(n-1)已知,又f(n)每一条拆线与另一条拆线交点为4,则新加第N条拆线交点数增加4*(n-1)
顶点数比f(n-1)多一个,故f(n)=f(n-1)+4*(n-1)+1
#include<cstdio>
#define LL long long int
LL a[];
int main()
{
LL n,i,t;
a[]=;
a[]=;
for(i=;i<=;i++)
{
a[i]=a[i-]+*(i-)+;
}
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
printf("%lld\n",a[n]);
}
}
简单DP的更多相关文章
- HDU 1087 简单dp,求递增子序列使和最大
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- Codeforces Round #260 (Div. 1) A. Boredom (简单dp)
题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...
- codeforces Gym 100500H A. Potion of Immortality 简单DP
Problem H. ICPC QuestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/a ...
- 简单dp --- HDU1248寒冰王座
题目链接 这道题也是简单dp里面的一种经典类型,递推式就是dp[i] = min(dp[i-150], dp[i-200], dp[i-350]) 代码如下: #include<iostream ...
- poj2385 简单DP
J - 简单dp Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:65536KB 64bit ...
- hdu1087 简单DP
I - 简单dp 例题扩展 Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB ...
- poj 1157 LITTLE SHOP_简单dp
题意:给你n种花,m个盆,花盆是有顺序的,每种花只能插一个花盘i,下一种花的只能插i<j的花盘,现在给出价值,求最大价值 简单dp #include <iostream> #incl ...
- hdu 2471 简单DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2571 简单dp, dp[n][m] +=( dp[n-1][m],dp[n][m-1],d[i][k ...
- Codeforces 41D Pawn 简单dp
题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...
- poj1189 简单dp
http://poj.org/problem?id=1189 Description 有一个三角形木板,竖直立放.上面钉着n(n+1)/2颗钉子,还有(n+1)个格子(当n=5时如图1).每颗钉子和周 ...
随机推荐
- 【POJ 3368】Frequent values(RMQ)
Description You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In ad ...
- 【模板】RMQ(计算区间最值)
①一维RMQ (1) dp[i,j] 表示从第i个数起连续2j个数中的(最大值min.最小值max.最大公约数gcd……),通过更改下列代码中的红色函数即可实现. (2) b数组放置所需查询的数列. ...
- SQL Server公用表达式CET递归查询所有上级数据
with cte as( select bianma,fjbm from #tree where chkDisabled='true' union all select t.bianma,t.fjbm ...
- npm常见配置收集
npm代理设置为走ss通道:npm config set proxy 'http://localhost:1080'
- linux 操作系统之磁盘管理
磁盘管理 存储设备:硬盘 , U盘 , 移动硬盘 , 光盘 , 软件. 组装一台电脑 无法被修改 df -h #查看磁盘分区的情况 , 可用的. 查看磁盘或者目录的内容 df “df” 常用的 “-i ...
- python3 练习题100例 (六)
题目六:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.……. #!/usr/bin/env python3 ...
- Python学习手册之数据封装、类方法、静态方法和属性函数
在上一篇文章中,我们介绍了 Python 的内部方法.操作符重载和对象生命周期,现在我们介绍 Python 的数据封装.类方法.静态方法和属性函数.查看上一篇文章请点击:https://www.cnb ...
- JZ2440开发板:UART(串口)使用(学习笔记)
查看UART在硬件上的信息,阅读JZ2440原理图可以看到: JZ2440开发板的UART0是可以跟USB相接的,用于打印调试,UART1,UART2两个串口用来外接模块.所以本文仅对UART0进行操 ...
- git忽略项gitegnore配置
在git中如果想忽略掉某个文件, 不让这个文件提交到版本库中,可以使用修改 .gitignore 文件的方法.这个文件每一行保存了一个匹配的规则 例如 # 此为注释 – 将被 Git 忽略 *.a # ...
- 北京Uber优步司机奖励政策(12月13日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...