2471: 找东西的WXS
内存限制:64 MB时间限制:3.000 S
评测方式:文本比较命题人:外部导入
提交:1157解决:466
题目描述
从前,有个叫wxs的人,他每次找东西的时候,只会到自己的右边去找东西,绝对不会返回去找,有一天,他的朋友把他的宝贝放在了一个和蜂房结构一样的地区中的某个房子里面,这个时候wxs就懵逼了,需要我们的帮助,假设wxs的位置是a,他的宝贝是b,那么让我们来编写一个程序,计算一下a走到b的所有路线吧。
其中,结构如下所示。
输入
输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。
输出
对于每个测试实例,请输出a到b的可能路线数,每个实例的输出占一行。
样例输入 复制
2
1 2
3 6
样例输出 复制
1
3
思路:
该题输入两个整数a,b;要求a到b的可能路线数,我们根据规律可得到其实就是a,b的差值的斐波拉契数列;
代码如下:
#include<stdio.h>
int t[50] = { 1,1,2 };
int f(int n)
{
if (t[n] != 0)
{
return t[n];
}
else
{
return t[n] = (f(n - 1) + f(n - 2));
}
}
int main()
{
int N, a, b;
scanf("%d", &N);
while (N--)
{
scanf("%d%d", &a, &b);
printf("%d\n", f(b - a));
}
return 0;
}
2042: 最大连续子段和
内存限制:64 MB时间限制:1.000 S
评测方式:文本比较命题人:外部导入
提交:440解决:115
题目描述
给定有n个整数(可能为负整数)组成的序列a1,a2,...,an,求该序列连续的子段和的最大值。如果该序列的所有元素都是负整数时定义其最大子段和为0。
例如,当(a1,a2,a3,a4,a5)=(-5,11,-4,13,-4-2)时,最大子段和为11+(-4)+13=20。
输入
输入数据有多组测试数据。每组测试数据有两行:第一行整数个数N,第二行为N个整数,每个整数之间用一空格隔开。
输出
每个用例,用一行输出最大连续子段和。
样例输入 复制
6
-2 11 -4 13 -5 -2
样例输出 复制
20
思路:
这是一题动态规划的题,其关键就是dp[i]==max(dp[i-1]+A[i],A[i]);
代码如下:
#include<stdio.h>
long long a[10000];
int main()
{
int n;
long long sum = 0;
while (~scanf("%d", &n))
{
long long max = -9999999;
sum = 0;
for (int i = 0; i < n; i++)
{
scanf("%lld", &a[i]);
if (a[i] > max)
{
max = a[i];
}
}
if (max <= 0)
{
sum = 0;
}
else
{
for (int i = 0; i < n; i++)
{
sum += a[i];
if (sum < 0)
{
sum = 0;
continue;
}
if (sum > max)
{
max = sum;
}
}
}
printf("%lld\n", max);
}
return 0;
}