问题描述:对有些单元格不可达的收集问题,求最大硬币收集数和路径条数
#include<iostream>
using namespace std;
int max(int m,int n)
{
return m>n?m:n;
}
int main()
{
int m,n,i,j;
int f[100][100]={0},c[100][100]={0},l[100][100]={0};
cout<<"请输入格子行列数:";
cin>>m>>n;
for( i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
cin>>c[i][j];
}
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(i==1&&j==1)
f[i][j]=0;
else if(i==1)
{
f[1][j]=f[1][j-1]+c[1][j];
}
else if(j==1)
{
f[i][1]=f[i-1][1]+c[i][1];
}
else
{
f[i][j]=max(f[i-1][j],f[i][j-1])+c[i][j];
}
}
}
cout<<"收集到的最大硬币数:"<<f[m][n]<<endl;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(i==1&&j==1)
l[i][j]=1;
else
{
if(f[i][j]<0)
{
l[i][j]=0;
}
else
{
if(i==1)
l[1][j]=1;
else if(j==1)
l[i][1]=1;
else
l[i][j]=l[i-1][j]+l[i][j-1];
}
}
}
}
cout<<"路径数:"<<l[m][n]<<endl;
return 0;
}