Untitled
unknown
plain_text
2 years ago
2.7 kB
7
Indexable
Level 4
Qua Cầu
Có 1 số cây cầu làm bằng gỗ. Trải qua 1 thời gian,những cây cầu trở nên hư hại và xuất hiện những lỗ thủng trên đó. Được biết những cây cầu đó luôn có độ rộng M = 5(bước đi) và độ dài trong khoảng3
Công việc:
Có 1 người luôn luôn đứng giữa ở 1 phía của cây cầu. Nhiệm vụ của bạn là phải đưa người đó qua được cầu với số đồng xu nhặt được là lớn nhất. Được biết trên cầu có 1 số đồng xu bị đánh rơi và người đó chỉ có thể đi thẳng, đi chéo trái hoặc đi chéo phải. Ngoài ra người đó có mang 1 tấm ván. Nó có thể vá được 1 lỗ thủng trên cầu giúp người đó có thể đi qua được.
Lưu ý : không có nhiều hơn 1 đồng xu tại 1 địa điểm.
Input
Dòng đầu tiên là số lượng trường hợp thử nghiệm.
Dòng thứ 2 chiều dài của cây cầu (N).
N dòng tiếp theo mô tả cây cầu theo ma trận 2 chiều. Trong đó: ‘0’ là có thể đi được, ‘1’ là có đồng xu(có thể đi được)và ‘2’ là lỗ thủng.
Output
In theo định dạng “#test_case” và số đồng xu nhiều nhất có thể khi qua đươc cầu.
Nếu không thể qua cầu in ra -1.
Sample
Input
3
7
1 2 0 1 0
0 0 2 0 1
0 1 0 2 1
1 0 0 0 1
0 0 0 2 2
2 0 1 0 1
0 1 2 2 0
10
2 2 2 2 0
1 2 0 0 2
0 2 0 0 0
2 2 0 2 2
0 2 2 2 0
0 0 0 0 0
1 0 0 0 2
0 0 0 0 0
2 2 0 2 1
0 2 2 2 0
9
0 2 1 1 2
0 2 2 2 2
2 2 2 1 0
0 0 2 0 2
0 2 2 1 0
1 0 2 2 2
2 2 0 2 0
2 2 2 0 2
0 0 2 0 0
Output
#1 6
#2 -1
#3 0
#include<iostream>
using namespace std;
int ans=-1;
int dx[3]={-1,-1,-1};
int dy[3]={0,-1,1};
int N;
int a[100][100];
void chay(int r, int c, int p, int sum)
{
if(r==0){
if(ans<sum)
{
ans=sum;
}
return ;
}
for(int i=0; i<3;i++){
int x1= r+dx[i];
int x2= c+dy[i];
if( x1>=0 && x1<N && x2>=0 && x2<5){
if(a[x1][x2]<2) chay(x1,x2,p,sum+a[x1][x2]);
else if(p) chay(x1,x2,0,sum);
}
}
}
int main()
{
//freopen("text.txt","r",stdin);
int t;
cin>>t;
int sum=0;
for(int tc=1; tc<=t;tc++){
cin>>N;
for(int i=0;i<N;i++){
for(int j=0; j<5;j++){
cin>>a[i][j];
}
}
ans = -1;
chay(N,2,1,0);
cout<<"#"<<tc<< " "<<ans<<endl;
}
return 0;
}
Editor is loading...