1
已解决
李瑞曦
高级天翼
高级天翼
在酷町猫的家里一共有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;//目标:输出跳到第楼梯顶部最少要踩到老化的台阶数