源代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 2e3+5;
int a[N][N],dp[N][2],n,e;
int main(){
memset(a,-1,sizeof(a));
memset(dp,-1,sizeof(dp));
scanf("%d%d",&n,&e);
dp[0][0]=dp[1][0]=0;dp[1][1]=0;
for(int i=1;i<=e;i++){
int x,y,m;
scanf("%d%d%d",&x,&y,&m);
a[x][y]=m;
}
for(int i=1;i<=n;i++){
int ans=INT_MAX,sum;
for(int j=1;j<=i;j++){
if(a[j][i]==-1||dp[j][0]==-1)continue;
if(ans>dp[j][0]){
ans=dp[j][0]+a[j][i];
sum=dp[j][1]+1;
}
}
if(ans==INT_MAX)continue;
dp[i][0]=ans;
dp[i][1]=sum;
}
if(dp[n][0]==-1)cout<<"No answer";
else printf("%d %d",dp[n][0],dp[n][1]);
return 0;
}
结果:
