zoukankan      html  css  js  c++  java
  • 算法练习(八)

    一、年终奖

    题目描述

    小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6 * 6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物。
    给定一个6 * 6的矩阵board,其中每个元素为对应格子的礼物价值,左上角为[0,0],请返回能获得的最大价值,保证每个礼物价值大于100小于1000。

    传送门

    代码

    #include<stdio.h>
    
    int main() {
    	int board[6][6];
    	int i,j,x,y;
    	for (i = 0; i < 6; i++) {
    		for (j = 0; j < 6; j++) {
    			scanf("%d",&board[i][j]);
    		}
    	}
    	
    	for (i = 0; i < 6; i++) {
    		for (j = 0; j < 6; j++) {
    			if (i == 0 && j == 0) {
    				continue;
    			} else if (i == 0) {  // 上一个数在左边 
    				board[i][j] += board[i][j-1];
    			} else if (j == 0) {  // 上一个数在上边 
    				board[i][j] += board[i-1][j];
    			} else {
    				x = board[i][j] + board[i][j-1];
    				y = board[i][j] + board[i-1][j];
    				
    				if (x > y) {  // 上、左两个数选最大的 
    					board[i][j] = x;
    				} else {
    					board[i][j] = y;
    				}
    			}
    		}
    	}
    	printf("%d
    ",board[5][5]);
    	return 0;
    }
    

    解题思路

    除起点位置,每一个数所在的位置都有一个或两个方向可以到达。通过分析获得每个位置的上一个位置点,并将当前位置与上个可能位置中的较大者相加,所得值赋予当前位置,再遍历所有位置,不断累加至终点。


    二、机器人走方格

    题目描述

    有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。
    给定两个正整数int x,int y,请返回机器人的走法数目。保证x+y小于等于12。

    测试样例:

    2,2
    

    返回:

    2
    

    传送门

    代码

    #include<stdio.h>
    
    int main() {
    	int n,m;
    	scanf("%d%d",&n,&m);
    	int i,j,a[n][m];
    	for (i = 0; i < n; i++) {
    		for (j = 0; j < m; j++) {
    			if (i == 0 || j == 0) {  // 到第一行、第一列所有点的走法都为 1 
    				a[i][j] = 1;
    			} else {
    				a[i][j] = 0;
    			}
    		}
    	}
    	for (i = 1; i < n; i++) {  // 注意和上一个循环相比,起点不同 
    		for (j = 1; j < m; j++) {
    			a[i][j] = a[i-1][j] + a[i][j-1];
    		}
    	}
    	
    	printf("%d
    ",a[n-1][m-1]);
    	return 0;
    }
    

    解题思路

    我们可以知道,如果终点在第一行或第一列,那么走法只有一种。而一个点的走法数,等于到达此点前一个点所有点走法的和。所以,先将已知点的走法数录入(第一行及第一列),再遍历所有点,不断累加(从第二行,第二列开始)。

    附:图

    以上

  • 相关阅读:
    toj 2975 Encription
    poj 1797 Heavy Transportation
    toj 2971 Rotating Numbers
    zoj 2281 Way to Freedom
    toj 2483 Nasty Hacks
    toj 2972 MOVING DHAKA
    toj 2696 Collecting Beepers
    toj 2970 Hackle Number
    toj 2485 Card Tric
    js页面定位,相关几个属性
  • 原文地址:https://www.cnblogs.com/mxwbq/p/7441220.html
Copyright © 2011-2022 走看看