116

#include <iostream>
#include <cstdio>

#define MX 100000000

using namespace std;

int r,c;
int input[11][101];
int dp[11][101];
int next_row[11][101];

int main()
{
	int tmp,temp_position,row;

	while(scanf("%d%d",&r,&c)==2)
	{
		for(int i=0;i<r;i++)
			for(int j=0;j<c;j++)
				cin>>input[i][j];

		for(int i=0;i<r;i++)
			dp[i][c-1]=input[i][c-1];

		for(int i=c-2;i>=0;i--)
		{
			for(int j=0;j<r;j++)
			{
				tmp=MX;

				for(int k=-1;k<=1;k++)
				{
					temp_position = (j+k+r)%r;

					if(tmp>dp[temp_position][i+1] || (tmp==dp[temp_position][i+1] && temp_position<next_row[j][i]))
					{
						next_row[j][i]=temp_position;
						tmp = dp[temp_position][i+1];
					}
				}
				dp[j][i]=input[j][i]+tmp;
			}
		}

		tmp = MX;

		for(int i=0;i<r;i++)
		{
			if(tmp>dp[i][0])
			{
				tmp = dp[i][0];
				row = i;
			}
		}
		cout<<row+1;

		for(int i=0;i<c-1;i++)
		{
			row = next_row[row][i];
			cout<<" "<<row+1;
		}
		cout<<"\n"<<tmp<<"\n";
	}

	return 0;
}

 

#include <iostream>
#include <cstdio>

#define MX 100000000

using namespace std;

int r,c;
int input[11][101];
int dp[11][101];
int next_row[11][101];

int main()
{
	int tmp,temp_position,row;

	while(scanf("%d%d",&r,&c)==2)
	{
		for(int i=0;i<r;i++)
			for(int j=0;j<c;j++)
				cin>>input[i][j];

		for(int i=0;i<r;i++)
			dp[i][c-1]=input[i][c-1];

		for(int i=c-2;i>=0;i--)
		{
			for(int j=0;j<r;j++)
			{
				tmp=MX;

				for(int k=-1;k<=1;k++)
				{
					temp_position = (j+k+r)%r;

					if(tmp>dp[temp_position][i+1] || (tmp==dp[temp_position][i+1] && temp_position<next_row[j][i]))
					{
						next_row[j][i]=temp_position;
						tmp = dp[temp_position][i+1];
					}
				}
				dp[j][i]=input[j][i]+tmp;
			}
		}

		tmp = MX;

		for(int i=0;i<r;i++)
		{
			if(tmp>dp[i][0])
			{
				tmp = dp[i][0];
				row = i;
			}
		}
		cout<<row+1;

		for(int i=0;i<c-1;i++)
		{
			row = next_row[row][i];
			cout<<" "<<row+1;
		}
		cout<<"\n"<<tmp<<"\n";
	}

	return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *