zoukankan      html  css  js  c++  java
  • [NOIP2000]方格取数

    题目描述

    设有(N×N)的方格图((N≤9)),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。如下图所示(见样例):
    A 0 0 0 0 0 0 0
    0 0 13 0 0 6 0 0
    0 0 0 0 7 0 0 0
    0 0 0 14 0 0 0 0
    0 21 0 0 0 4 0 0
    0 0 15 0 0 0 0 0
    0 14 0 0 0 0 0 0
    0 0 0 0 0 0 0 B
    某人从图的左上角的(A)点出发,可以向下行走,也可以向右走,直到到达右下角的(B)点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。
    此人从(A点到B)点共走两次,试找出2条这样的路径,使得取得的数之和为最大。

    输入格式

    输入的第一行为一个整数(N)(表示(N imes N)的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的0表示输入结束。

    输出格式

    只需输出一个整数,表示2条路径上取得的最大的和。

    输入输出样例

    输入

    8
    2 3 13
    2 6 6
    3 5 7
    4 4 14
    5 2 21
    5 6 4
    6 3 15
    7 2 14
    0 0 0

    输出

    67

    题解

    简单题,设dp[i][j][k][l]表示第1个人走到(i,j)而第2个人走到(k,l)时的最优值,特判两个人不能走到同一位置即可。

    #include<bits/stdc++.h>
    #define int long long
    #define maxn 15
    #define local
    using namespace std;
    inline char get(){
    	static char buf[30000],*p1=buf,*p2=buf;
    	return p1==p2 && (p2=(p1=buf)+fread(buf,1,30000,stdin),p1==p2)?EOF:*p1++;
    }
    inline int read(){
    	register char c=get();register int f=1,_=0;
    	while(c>'9' || c<'0')f=(c=='-')?-1:1,c=get();
    	while(c<='9' && c>='0')_=(_<<3)+(_<<1)+(c^48),c=get();
    	return _*f;
    }
    int n;
    int a[maxn][maxn];
    int dp[maxn][maxn][maxn][maxn];
    signed main(){
    	#ifdef local
    	freopen("1.txt","r",stdin);
    	#endif
    	n=read();
    	for(register int i=1;1;i++){
    		int x=read(),y=read(),cas=read();
    		if(x==0 && y==0 && cas==0)break;
    		a[x][y]=cas;
    	}
    	int ban=-1;
    	for(register int i=1;i<=n;i++){
    		for(register int j=1;j<=n;j++){
    			for(register int k=1;k<=n;k++){
    				for(register int l=1;l<=n;l++){
    					dp[i][j][k][l]=max(max(dp[i-1][j][k][l-1],dp[i-1][j][k-1][l]),max(dp[i][j-1][k][l-1],dp[i][j-1][k-1][l]))+a[i][j]+a[k][l];
    					if(i==k && j==l)dp[i][j][k][l]-=a[i][j];
    				}
    			}
    		}
    	}
    	cout<<dp[n][n][n][n];
    	return 0;
    }
    
  • 相关阅读:
    微信小程序学习系列(5) 微信小程序逻辑层
    微信小程序学习系列(4) 微信小程序架构文件
    微信小程序学习系列(3) 如何优雅的使用微信开发者工具
    使用Sqlserver 2012 导出表数据为SQL脚本
    Sqlserver2012 使用sql语句增加(或删除)表一个字段
    微信小程序学习系列(2) 使用AppId创建一个微信小程序
    微信小程序学习系列(1) 如何注册微信小程序
    微信小程序如何使用Vant
    vs2017搭建自己的nuget服务器
    使用swagger实现在线api文档自动生成 在线测试api接口
  • 原文地址:https://www.cnblogs.com/Chen574118090/p/11551397.html
Copyright © 2011-2022 走看看