#include<iostream>
#include<iomanip>
#include<queue>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int l,l2;
cin>>l>>l2;
int n[l][l2],m[l][l2];
for(int i=0;i<l;i++)
for(int j=0;j<l2;j++) cin>>n[i][j],m[i][j]=n[i][j];
if(l==1)
{
int num=0;
for(int i=0;i<l2;i++) num+=n[0][i];
cout<<num<<"\n";
continue;
}
queue<int> x;
queue<int>y;
x.push(0);
y.push(0);
//cout<<m[l-1][l2-1]<<"\n\n";
//n[l-1][l2-1]+=1000;
//m[l-1][l2-1]+=1001;
while(!x.empty())
{
if(x.front()==l2-2&&y.front()==l-1) break;
if(x.front()+1<l2)
{
int x2=x.front()+1;
int y2=y.front();
if(n[y2][x2]==m[y2][x2]) n[y2][x2]+=n[y.front()][x.front()],x.push(x2),y.push(y2);
else if(n[y2][x2]>m[y2][x2]+n[y.front()][x.front()]) n[y2][x2]=m[y2][x2]+n[y.front()][x.front()];
}
if(y.front()+1<l)
{
int x2=x.front();
int y2=y.front()+1;
if(n[y2][x2]==m[y2][x2]) n[y2][x2]+=n[y.front()][x.front()],x.push(x2),y.push(y2);
else if(n[y2][x2]>m[y2][x2]+n[y.front()][x.front()]) n[y2][x2]=m[y2][x2]+n[y.front()][x.front()];
}
x.pop(),y.pop();
}
/*for(int i=0;i<l;i++)
{
for(int j=0;j<l2;j++) cout<<setw(2)<<n[i][j]<<" ";
cout<<"\n";
}*/
int k=(n[l-1][l2-2]>n[l-2][l2-1])?n[l-2][l2-1]:n[l-1][l2-2];
cout<<m[l-1][l2-1]+k<<"\n";
}
}
您的答案為: 9 正確答案為: 0
試一下這組資料,答案應是 0,但你的程式跑出 9
1
3
4
0 0 0 0
1 2 6 0
5 6 2 0
試一下這組資料,答案應是 0,但你的程式跑出 9
1
3
4
0 0 0 0
1 2 6 0
5 6 2 0
thanks
試一下這組資料,答案應是 0,但你的程式跑出 9
1
3
4
0 0 0 0
1 2 6 0
5 6 2 0
我這個資料自己測可以過ㄟ....
但我也是WA(line:6)
我的程式碼:
#include<bits/stdc++.h>
using namespace std;
int main(){
int a;
cin>>a;
while(a--){
int b,c;
cin>>b>>c;
int f[b][c],DP[b][c];
for(int d=0;d<b;d++)
for(int e=0;e<c;e++)
cin>>f[d][e];
for(int d=0;d<b;d++)
for(int e=0;e<c;e++){
if(d==0&&e==0)
DP[d][e]=f[d][e];
else if(d&&!e)
DP[d][e]=f[d][e]+DP[d-1][e];
else if(!d&&e)
DP[d][e]=f[d][e]+DP[d][e-1];
else if(d&&!e)
DP[d][e]=f[d][e]+DP[d-1][e];
else
DP[d][e]=f[d][e]+min(DP[d-1][e],DP[d][e-1]);
}
cout<<DP[b-1][c-1]<<endl;
}
}
1
5 5
0 0 0 1 1
1 1 0 1 1
0 0 0 1 1
0 1 1 1 1
0 0 0 0 0
您的答案為: 1
正確答案為: 0