• Project Euler 11 Largest product in a grid



    题意:在这个20×20方阵中,四个在同一方向(从下至上、从上至下、从右至左、从左至右或者对角线)上相邻的数的乘积最大是多少?

    思路:暴力去枚举以 ( x , y ) 为中心拓展的四个方向


    /*************************************************************************
        > File Name: euler011.c
        > Author:    WArobot 
        > Blog:      http://www.cnblogs.com/WArobot/ 
        > Created Time: 2017年06月25日 星期日 09时35分02秒
     ************************************************************************/
    
    #include <stdio.h>
    #include <inttypes.h>
    
    #define MAX_N 26
    #define max(a,b) a > b ? a : b
    
    void input_mat(int32_t mat[][MAX_N]) {
    	for(int32_t i = 3 ; i < 23 ; i++) {
    		for(int32_t j = 3 ; j < 23 ; j++) {
    			scanf("%d",&mat[i][j]);
    		}
    	}
    }
    void solve(int32_t mat[][MAX_N]) {
    	int32_t ans = 0;
    	int32_t dx[4] = { 0 , 1 , 1 , 1 } , dy[4] = { 1 , 0 , 1 , -1 };	// 定义方向数组
    	for(int32_t i = 3 ; i < 23 ; i++){
    		for(int32_t j = 3 ; j < 23 ; j++){
    			for(int32_t num = 0 ; num < 4 ; num++){			// 四个方向进行遍历
    				int32_t p = mat[i][j];
    				for(int32_t k = 1 ; k < 4 ; k++){
    					p *= mat[ i + k*dx[num] ][ j + k*dy[num] ];
    				}
    				ans = max( ans , p );
    			}
    		}
    	}
    	printf("%d
    ",ans);
    }
    int32_t main() {
    	int32_t mat[MAX_N][MAX_N] = {0};
    	freopen("PE11input.txt","r",stdin);
    
    	input_mat(mat);
    	solve(mat);
    	return 0;
    }
  • 相关阅读:
    [COCI2013]DLAKAVAC
    [TJOI2013]最长上升子序列
    AGC040E Prefix Suffix Addition
    AGC010E Rearranging
    AGC021F Trinity
    AGC002F Leftmost Ball
    JOISC2019D ふたつのアンテナ
    LOJ6210 「美团 CodeM 决赛」tree
    Luogu P3781 [SDOI2017]切树游戏
    Problem. M
  • 原文地址:https://www.cnblogs.com/WArobot/p/7076260.html
Copyright © 2020-2023  润新知