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;
    }
    
  • 相关阅读:
    linux开机启动服务的修改与查看
    我从百度来30万IP的经验
    JavaScript静态页面值传递之Cookie篇
    采用HttpModules来重写URLs(实践篇)
    JavaScript,5种调用函数的方法
    [JS]详尽解析window.event对象
    mysql锁定单个表的方法
    mysql常见错误提示及解决方法
    浏览器Chrome 3.0.195.21 Final
    svn windows和linux安装笔记
  • 原文地址:https://www.cnblogs.com/Chen574118090/p/11551397.html
Copyright © 2011-2022 走看看