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

0
0
已解决
杜承俊
杜承俊
资深守护
资深守护

题目链接:

https://ke.codingtang.com/#/problem/problemSub?id=4818

大佬们,求您们了,回答一下吧!!!

#include<bits/stdc++.h>
using namespace std;
int x,a[1110],f[1110],i,j,n,p,q,m,mn=2147483647,y;
int main(){
    cin>>n>>p>>q>>m;
    for(i=1;i<=m;i++){
        cin>>y;
        a[y]=1;
    }
    if(a[0]==1)f[0]=1;
    for(i=p;i<=n+q;i++){
        int mi=2147483647;
        if(i-p>n)x=n;else x=i-p;
        y=max(i-q,0);
        for(j=x;j>=y;j--)if(f[j]<mi)mi=f[j];
        if(a[i]==1)f[i]=mi+1;else f[i]=mi;
    }
    for(i=n+1;i<=n+q;i++)if(f[i]<mn)mn=f[i];
    cout<<mn;
}

杜承俊在2021-05-01 19:54:29追加了内容

1

Wrong Answer

60

2021年05月01日 19:51

 

2

Wrong Answer

60

2021年05月01日 18:49

 

3

Wrong Answer

60

2021年05月01日 18:33

 

4

Runtime Error

0

2021年05月01日 18:31

 

5

Runtime Error

0

2021年05月01日 18:29

 

6

Runtime Error

0

2021年05月01日 18:24

 

7

Runtime Error

10

2021年04月29日 23:18

 

8

Runtime Error

10

2021年04月29日 23:16

 

9

Time Limit Exceeded

10

2021年04月29日 23:16

 

10

Time Limit Exceeded

10

2021年04月29日 23:13

 

11

Time Limit Exceeded

10

2021年04月29日 23:12

 

12

Runtime Error

10

2021年04月29日 23:09

 

13

Runtime Error

10

2021年04月29日 23:03

 

14

Wrong Answer

10

2021年04月29日 22:22

 

15

Wrong Answer

10

2021年04月29日 22:04

 

16

Wrong Answer

60

2021年04月29日 21:35

 

17

Wrong Answer

60

2021年04月29日 21:33

 

18

Wrong Answer

60

2021年04月29日 21:32

 

19

Wrong Answer

60

2021年04月29日 21:30

 

20

Wrong Answer

60

2021年02月10日 20:33

 

21

Wrong Answer

60

2021年02月10日 17:51

 

22

Wrong Answer

60

2021年02月10日 17:47

 

23

Wrong Answer

60

2021年02月10日 17:46

24

Wrong Answer

50

2021年02月10日 17:46

 

25

Wrong Answer

60

2021年02月10日 14:05

 

26

Wrong Answer

60

2021年02月10日 14:04

 

27

Wrong Answer

60

2021年02月10日 13:54

 

28

Wrong Answer

60

2021年02月10日 13:53


1
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

一道很简单的DP题

考虑在第i步之前的状态,可得状态转移方程:

f[i]=min(f[i-j]+flag[i],f[i]);  (i>=j,a<=j<=b)

根据状态转移方程,可以写出代码

for(int i=1;i<=n+b;i++){
        f[i]=0x3f3f3f3f;
        for(int j=a;j<=b;j++){
            if(i>=j) f[i]=min(f[i-j]+flag[i],f[i]);
        }
    }

最后只需要在n~n+b级台阶中找一个最小值就行了

我要回答