zoukankan      html  css  js  c++  java
  • NOIP2008 传纸条

    题目

    luogu1006

    vijos1493

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #include <cmath> 
    #define N 60
    using namespace std;
    
    int n,m,mp[N][N];
    int f[N][N][N][N];//f[i][j][l][r]表示两张纸分别传到(i,j)和(l,r)的最大好心程度 
    
    int main()
    {
    	scanf("%d%d",&m,&n);
    	for(int i=1;i<=m;i++)
    		for(int j=1;j<=n;j++) scanf("%d",&mp[i][j]);
    	for(int i=1;i<=m;i++)
    		for(int j=1;j<=n;j++)
    			for(int l=1;l<=m;l++)
    				for(int r=1;r<=n;r++)
    				{
    					int t=max(f[i-1][j][l-1][r],max(f[i-1][j][l][r-1],max(f[i][j-1][l-1][r],f[i][j-1][l][r-1])));
    					if(i==l&&j==r)//若两张纸条传至相同的地方,只记录一次的值,那么这必然不会是最优情况,会在后续被更新,所以路径不会重复
    						f[i][j][l][r]=t+mp[i][j];
    					else  f[i][j][l][r]=t+mp[i][j]+mp[l][r];
    				}
    	printf("%d",f[m][n][m][n]);
    	return 0;
    }
  • 相关阅读:
    希尔排序
    代理模式
    快速排序
    插入排序
    各种排序算法的稳定性和复杂度
    简单选择排序
    冒泡排序
    流程图
    PLAY学习【未完】
    项目之maven心得
  • 原文地址:https://www.cnblogs.com/XYZinc/p/7521445.html
Copyright © 2011-2022 走看看