Luogu P1004 [NOIP2000]方格取数
来源:互联网 发布:农村选举知乎 编辑:程序博客网 时间:2024/06/05 20:59
题目传送门:https://www.luogu.org/problem/show?pid=1004
这道题是NOIP2000TG的T4。
主要思路:这道题可以用DP,i和j是第一个人的位置,k和l是第二个人的位置.用dp[i][j][k][l]来表示两个人站在这两个位置上所能取的最大数.到(x,y)只能从(x-1,y)和(x,y-1)这两个位置走上来,所以有四种可能,所以我们可以得出一个状态转移方程:
dp[i][j][k][l]=max(dp[i-1][j][k-1][l],dp[i-1][j][k][l-1],dp[i][j-1][k-1][l],dp[i][j-1][k][l-1],然后再加上(i,j),(k,l)自带的数,如果这两个位置相等,那么再除以二,这么一来dp[i][j][k][l]的值就算出来了。
附上代码:
#include <iostream>using namespace std;int n,x,y,z,map[10][10],dp[10][10][10][10],i,j,k,l,sum1,sum2,sum3;int main(){cin>>n;while(1){cin>>x>>y>>z;if(x==0 && y==0 && z==0)break;map[x][y]=z;}for(i=1;i<=n;i++){for(j=1;j<=n;j++){for(k=1;k<=n;k++){for(l=1;l<=n;l++){sum1=max(dp[i-1][j][k-1][l],dp[i-1][j][k][l-1]);sum2=max(dp[i][j-1][k-1][l],dp[i][j-1][k][l-1]);sum3=map[i][j]+map[k][l];if(i==k && j==l){sum3/=2;}sum3+=max(sum1,sum2);dp[i][j][k][l]=sum3;}}}}cout<<dp[n][n][n][n];return 0;}
阅读全文
2 0
- Luogu P1004 [NOIP2000]方格取数
- luogu【P1004】方格取数
- luogu P1004 方格取数
- 洛谷 P1004 [NOIP2000 T4] 方格取数
- P1004 方格取数题解NOIP2000
- P1004 方格取数
- P1004 方格取数
- P1004 方格取数
- P1004 方格取数
- 【P1004】 方格取数
- Noip2000方格取数
- NOIP2000方格取数
- NOIP2000 方格取数
- NOIP2000 方格取数
- NOIp2000 方格取数
- 【NOIP2000】方格取数
- #NOIP2000#方格取数
- 【NOIP2000】方格取数
- Leetcode 第二章线性表--2.1数组---2.1.1 remove duplicate from sorted array--2017/7/23
- 70. Climbing Stairs
- C语言小结--指针和数组的结合
- 【华为机试】字符个数统计
- 2017.722考试(下午)
- Luogu P1004 [NOIP2000]方格取数
- 【AC自动机模板】【HDU2222】 Keywords Search
- String方法
- bzoj1004(组合+乘法逆元)(简便)
- 数据结构杂谈
- hdu 3977
- IP地址和MAC地址工作方式
- STM32学习之路(十)单片机最小系统原理图设计
- mysql多条相同连接的数据合并一条函数