问题标题: 酷町堂:4818 酷町猫爬楼梯

1
0
已解决
李瑞曦
李瑞曦
高级天翼
高级天翼

在酷町猫的家里一共有n阶台阶。其中一些台阶有点老化,踩上去会嘎吱嘎吱响。现在用正整数0到n表示这些台阶。0表示台阶底部,n表台阶顶部。酷町猫从台阶底部出发,每次爬的台阶数可以是从a和b中间的任意一个正整数。当酷町猫的位置大于n时,就算爬到了台阶顶部。
如果现在给出了台阶数n,最少要爬的台阶数a和最多要爬的台阶数b。以及老化台阶的位置。试求出酷町猫爬到台阶顶部最少要踩到老化的台阶数。

输入描述 Input Description

第一行有1个正整数n,表示台阶的级数。(1≤n≤1,000)

第二行有3个正整数a,b,m,用空格隔开,分别表示酷町猫一步可跨过的最小和最大台阶数,以及老化的台阶数。其中1≤a≤b≤10,1≤m≤100。

第三行开始,有m个不同的正整数,分别表示老化的台阶的坐标。这些整数用空格隔开。

输出描述 Output Description

一个整数,表示爬到台阶顶部最少需要踩到老化的台阶的级数

样例输入 Sample Input

10 1 2 4 2 3 5 7

样例输出 Sample Output

1

-----------------------------------------------------------------------

我的代码:

#include<iostream>
using namespace std;
int n,m,t,aa,bb;
bool a[1111];
int f[1111];
int main(){
    cin>>n>>aa>>bb>>m;
    for(int i=1; i<=m; i++) {
        cin>>t;
        a[t] = true;
    }
    f[0]=1;
    for(int i=1; i<=n; i++) {
        if(a[i]) continue;
        for(int j=aa;j<=bb;j++){
            if(i-j>=0){
                f[i]+=f[i-j];
            }
        }
    }
    cout << f[n];
    return 0;
}

嘤嘤嘤,样例没过,跪求大佬帮忙

李瑞曦在2021-02-28 17:58:07追加了内容

额,我好像发现了什么:

我的代码搞成了求方案数了,而且我的代码的意思是不能踩到老化的台阶

可是

我不知道怎么改了啊啊啊啊

李瑞曦在2021-02-28 18:30:58追加了内容


0
已采纳
包思远
包思远
新手启示者
新手启示者
memset(f,0x3f,sizeof(f));
f[0]=0;
for(int i=aa;i<n+bb;i++){
	for(int j=aa;j<=min(i,bb);j++){
		f[i]=min(f[i],f[i-j]+a[i]);
	}
}
for(int i=n;i<n+b;i++)minn=min(minn,f[i]);
cout<<minn;//目标:输出跳到第楼梯顶部最少要踩到老化的台阶数

从输入后面开始都有问题

包思远在2021-02-28 18:52:05追加了内容

 上述代码有点问题,改正如下

memset(f,0x3f,sizeof(f));
f[0]=0;
for(int i=aa;i<n+bb;i++){
	for(int j=aa;j<=min(i,bb);j++){
		f[i]=min(f[i],f[i-j]+c[i]);
	}
}
for(int i=n;i<n+bb;i++)minn=min(minn,f[i]);
cout<<minn;//目标:输出跳到第楼梯顶部最少要踩到老化的台阶数
我要回答