C++スキー
1819 ワード
試験問題の説明:
LYHはスキーが好きです.スキーは确かに刺激的ですが、スピードを得るためには、滑るエリアを下に傾けなければなりません.LYHが坂の底まで滑ると、再び上り坂を歩かなければなりません.ヘリコプターが彼を乗せに来るのを待たなければなりません.LYHは1つのエリアの中で最も長い滑り坂を知りたいです.勾配の長さは、点を通過する個数によって計算され、領域は2次元配列によって与えられ、配列の各数値は点の高さを表す.次に例を示す:1 2 3 4 5 16 17 19 6 15 24 25 20 7 14 23 22 21 8 13 11 10 9人は、ある点から上下左右に隣接する4つの点の1つにスライド可能であり、かつ高さが減少する場合にのみ、上記の例では、1本の実行可能な滑り坂は25-24-17-16-1(25から1まで)であり、もちろん25-24......2...1はより長く、実際にはこれが最も長い.
入力:
入力された第1の挙動は、領域の2次元配列の行数Rおよび列数C(1≦R、C≦100)の下にR行があり、各行にC個の数が高さを表す.
出力:
出力領域で最も長い勾配の長さ.
入力例:
5 51 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9
出力例:
25
運転時間制限:1000 ms;運行スペース制限:51200 KB;コード長制限:200000 B
検索した問題.(再帰は上にも置けます)
まず、2 D配列を定義することに注意してください.
次に入力し、ネストされたループを使用します.
その後、dfs(コード内のsearch)を行い、
dxとdyを定義し、それぞれ上下左右の4つの方向を計算します.
しかし、私たちは一度だけ行う必要があるので、一度判断しなければなりません.
転載先:https://www.cnblogs.com/FXY-180/p/9511459.html
LYHはスキーが好きです.スキーは确かに刺激的ですが、スピードを得るためには、滑るエリアを下に傾けなければなりません.LYHが坂の底まで滑ると、再び上り坂を歩かなければなりません.ヘリコプターが彼を乗せに来るのを待たなければなりません.LYHは1つのエリアの中で最も長い滑り坂を知りたいです.勾配の長さは、点を通過する個数によって計算され、領域は2次元配列によって与えられ、配列の各数値は点の高さを表す.次に例を示す:1 2 3 4 5 16 17 19 6 15 24 25 20 7 14 23 22 21 8 13 11 10 9人は、ある点から上下左右に隣接する4つの点の1つにスライド可能であり、かつ高さが減少する場合にのみ、上記の例では、1本の実行可能な滑り坂は25-24-17-16-1(25から1まで)であり、もちろん25-24......2...1はより長く、実際にはこれが最も長い.
入力:
入力された第1の挙動は、領域の2次元配列の行数Rおよび列数C(1≦R、C≦100)の下にR行があり、各行にC個の数が高さを表す.
出力:
出力領域で最も長い勾配の長さ.
入力例:
5 51 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9
出力例:
25
運転時間制限:1000 ms;運行スペース制限:51200 KB;コード長制限:200000 B
#include
#include
using namespace std;
int dx[5]={0,-1,0,1,0},
dy[5]={0,0,1,0,-1};
long r,c,i,j,p,t,ans;
long m[101][101],f[101][101];
int search(int,int);
int main()
{
cin>>r>>c;
ans=0;
for(i=1;i<=r;i++)
for(j=1;j<=c;j++)
cin>>m[i][j];
for(i=1;i<=r;i++)
for(j=1;j<=c;j++)
{
t=search(i,j);
f[i][j]=t;
if(t>ans)ans=t;
}
cout<0)
{
return(f[x][y]);
}
t=1;
for(i=1;i<=4;i++)
{
nx=x+dx[i];
ny=y+dy[i];
if((nx>=1)&&(nx<=r)&&(ny>=1)&&(ny<=c)&&(m[x][y]t)t=tmp;
}
}
f[x][y]=t;
return(t);
}
検索した問題.(再帰は上にも置けます)
まず、2 D配列を定義することに注意してください.
次に入力し、ネストされたループを使用します.
その後、dfs(コード内のsearch)を行い、
dxとdyを定義し、それぞれ上下左右の4つの方向を計算します.
しかし、私たちは一度だけ行う必要があるので、一度判断しなければなりません.
if(f[x][y]>0)
{
return(f[x][y]);
}
dfs , dfs 。
転載先:https://www.cnblogs.com/FXY-180/p/9511459.html