#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