动态规划 hrbust 1812

小乐乐想出门
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 410(244 users) Total Accepted: 317(238 users) Rating: Special Judge: No
Description
大家可能不知道,小乐乐的家好大好大,可是好乱好乱。下面那个矩阵就是她家的简化图,每一个格子表示一个房间,格子里的数字表示穿过这个房间需要的力气。小乐乐的卧室在左上角,而大门却在右下角。所以小乐乐得穿过一些房间才能出门。小乐乐有个习惯,她只会向下走或者向右走。小乐乐很懒,她想知道以最省力的方式出门需要花费多少力气?
Input
第一行输入一个整数n(1<n<1000)
随后n行,每行n个整数。表示小乐乐的家
其中,左上角和右下角保证为0.
Output
输出最小力气的值。
Sample Input
3
0 3 7
6 2 1
9 8 0
8
0 3253 3165 9415 3108 7744 8869 1768
347 6410 8 5465 9733 1529 2584 9148
552 8569 2569 288 7211 5335 6652 2144
8203 683 8868 7178 8045 3430 9283 6498
2196 5533 2772 2376 7221 1861 5743 647
217 2159 9000 5584 7908 3861 1064 7431
7444 6086 3073 9035 6379 3198 12 3916
7248 7482 7286 6824 9747 539 6282 0
Sample Output
6
35973
#include<stdio.h>
#include<string.h>
#define MAX 1000005
int Map[1005][1005];
int D[1005][1005];
int min(int x,int y)
{
	if(x>y)
		return y;
	return x;
}
int main()
{
	int n;
	while(~scanf("%d",&n))
	{
		memset(D,MAX,sizeof(D));
		for(int i = 1; i <= n; i++)
			for(int j = 1; j <= n; j++)
				scanf("%d",&Map[i][j]);
		D[n][n]=0;
		D[n][n-1] = Map[n][n-1];
		D[n-1][n] = Map[n-1][n];
		for(int i = n-2 ; i >= 1; i--)//最后一列
		{
			D[i][n] = Map[i][n]+D[i+1][n];
		}
		for(int i = n; i >= 1; i--)
		{
			for(int j = n-1; j >=1 ; j--)
			{
				D[i][j] = min(D[i][j+1],D[i+1][j])+Map[i][j];
			}
		}
		printf("%d\n",D[1][1]);
	}
 } 
发布了46 篇原创文章 · 获赞 6 · 访问量 5443
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章