動態規劃 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章