[NOIP提高组2000]方格取数

来源:互联网 发布:js 垃圾回收机制 编辑:程序博客网 时间:2024/06/05 09:14

【问题描述】

设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。如下图所示(见样例):
0 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 0
某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。
此人从A点到B 点共走两次,试找出2条这样的路径,使得取得的数之和为最大。
【输入文件】
输入的第一行为一个整数N(表示N*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
题解:
第一眼想到dfs,太水懒得写。
然后发现有个更好打的DP
f[i][j][u][v]表示从st出发的两条路,一条到了i,j,另一条到了u,v
状态转移详见代码。

#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<iostream>using namespace std;int n;int map[20][20];int f[20][20][20][20];int main(){    scanf("%d",&n);    while(1)    {        int a,b,c;        scanf("%d%d%d",&a,&b,&c);        if(a==0&&b==0&&c==0) break;        map[a][b]=c;    }    f[1][1][1][1]=map[1][1];    for(int i=1;i<=n;i++)    {        for(int j=1;j<=n;j++)        {            for(int u=1;u<=n;u++)            {                for(int v=1;v<=n;v++)                {                    f[i][j][u][v]=max(f[i-1][j][u-1][v],max(f[i][j-1][u-1][v],max(f[i-1][j][u][v-1],f[i][j-1][u][v-1])));                    f[i][j][u][v]+=map[i][j]+map[u][v];                    if(i==u&&j==v) f[i][j][u][v]-=map[i][j];                }            }        }    }    printf("%d",f[n][n][n][n]);}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 中医中医药网 广州中医药大学第一附属医院 河南中医药大学第一附属医院 河南中医药大学附属医院 成都中医药大学附属医院 云南中医药大学教务管理系统 湖北中医药大学教务 中医药大学附属医院 湖北中医药大学教务在线 天津中医药大学第一附属医院 天津中医药大学研究生院 云南中医药大学教务系统 北京中医药大学东方学院 山东中医药大学附属医院 辽宁中医药大学附属医院 上海中医药大学研究生院 广西中医药大学第一附属医院 山东中医药大学研究生处 江西中医药大学科技学院 广州中医药大学研究生院 陕西中医药大学数字校园 湖南中医药大学附属医院 安徽中医药大学第一附属医院 山东中医药大学第二附属医院 中医药大学东方学院 陕西中医药大学附属医院 安徽中医药大学附属医院 湖南中医药大学第一附属医院 浙江中医药大学教务处 甘肃中医药大学教务网 河南中医药大学中文网 世界中医药学会联合会 安微中医药高等专科学校 中华医学会中医药学会 中医药现代化国际科技大会 东中医药高等专科学校 世界科学技术中医药现代化 中医丰胸贴 中医特色贴敷疗法与处方 老中医小玲慧静煜通 输卵管通而不畅中医疗法