dp算出最大值后,搜索所有路径,走到终点时的值等于最大值则方案数+1
#include<iostream>
using namespace std;
const int N=20;
int n,ans,maxn;
int dp[N][N];
int w[N][N];
void dfs(int h,int l,int count)
{
if(h<1||l<1||h>n||l>n)
return;
if(count==maxn)
{
ans++;
return;
}
dfs(h+1,l,count+w[h+1][l]);
dfs(h,l+1,count+w[h][l+1]);
return;
}
int main()
{
cin>>n;
for(int i=n;i>0;i--)
for(int j=1;j<=n;j++)
cin>>w[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dp[i][j]=max(dp[i-1][j],dp[i][j-1])+w[i][j];
maxn=dp[n][n];
dfs(1,1,w[1][1]);
cout<<ans<<' '<<maxn;
return 0;
}