简单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).每颗钉子和周 ...
随机推荐
- 【HDOJ 1337】I Hate It(线段树维护区间最大值)
Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写 ...
- 奇(qi)谋(ji)巧(yin)计(qiao)
一.打表法 0.http://oeis.org/ 1.差分序列:https://blog.csdn.net/wu_tongtong/article/details/79115921 对于一个多项式产生 ...
- Jquery中数值求和及根据余数改变对应的数值样式
Jquery内容 <script type="text/javascript"> $(function () { var num = 0; $(".box o ...
- jQuery DOM/属性/CSS操作
jQuery DOM 操作 创建元素 只需要把DOM字符串传入$方法即可返回一个 jQuery 对象 var obj = $('<div class="test">&l ...
- 对于gitHub的总结随笔
作用:用于项目的版本管理 密切相关的是 git 操作 1.本地的文件上传到github上 ...
- header()函数用处
header() 函数向客户端发送原始的 HTTP 报头. 认识到一点很重要,即必须在任何实际的输出被发送之前调用 header() 函数(在 PHP 4 以及更高的版本中,您可以使用输出缓存来解决此 ...
- C#的哈希表Hashtable同步方法
在多线程环境的操作中对Hashtable进行操作需要进行同步控制,有两种方法,一种是由.Net自动控制:一种是在代码中自己控制. 1.使用Hashtable.Synchronized进行同步 Hash ...
- 决策树&随机森林
参考链接: https://www.bilibili.com/video/av26086646/?p=8 <统计学习方法> 一.决策树算法: 1.训练阶段(决策树学习),也就是说:怎么样构 ...
- python教程(二)·第一个python程序
几乎所有的计算机语言教程,不仅仅是python,都以这样一个相似的示例程序开始讲解--Hello World! 代码如下,简简单单的一行.想必稍微了解英语的读者,都能猜到这段代码功能吧. print( ...
- #!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby
#!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby # This script installs to ...