【NOIP考前题目回顾】Luogu P1006
2017-10-29 20:34
183 查看
思路
求一个最大值,一般就是DP了。初见这个题目像是费用流,而且建边显而易见,但是太麻烦,就没写……这个题的DP方案也不难,既然是来回,那么我们可以把一个人拆成两个人啊,这样对于“第一个人”枚举i行,fi,j表示到第j个格子时的最佳方案,对于“第二个人”枚举k行fk,l同理。这样我们就凑出了一个四维DP:fi,j,k,l=max(fi−1,j,k−1,l,fi,j−1,k−1,l,fi−1,j,k,l−1,fi,j−1,k,l−1)+ai,j+ak,l
最后理论上输出fn,m,n,m,实际上我们可以发现在计算过程中只算到了fn,m−1,n−1,m,所以输出后者就可以啦。
代码
#include <algorithm> #include <cctype> #include <climits> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <queue> #include <utility> int nextInt() { int num = 0; char c; bool flag = false; while ((c = std::getchar()) == ' ' || c == '\r' || c == '\t' || c == '\n'); if (c == '-') flag = true; else num = c - 48; while (std::isdigit(c = std::getchar())) num = num * 10 + c - 48; return (flag ? -1 : 1) * num; } int max4(const int a, const int b, const int c, const int d) { int x = std::max(a, b); if (c > x) x = c; if (d > x) x = d; return x; } const size_t _Siz = 51u; int f[_Siz][_Siz][_Siz][_Siz] = { 0 }; int a[_Siz][_Siz] = { 0 }; int n, m; int main(int argc, char **argv) { n = nextInt(); m = nextInt(); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) a[i][j] = nextInt(); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) for (int k = 1; k <= n; k++) for (int l = j + 1; l <= m; l++) f[i][j][k][l] = max4(f[i][j - 1][k - 1][l], f[i - 1][j][k][l - 1], f[i][j - 1][k][l - 1], f[i - 1][j][k - 1][l]) + a[i][j] + a[k][l]; std::cout << f [m - 1][n - 1][m] << std::endl; #ifdef __EDWARD_EDIT std::cin.get(); std::cin.get(); #endif return 0; }
相关文章推荐
- 【NOIP考前题目回顾】Luogu P1000
- 【NOIP考前题目回顾】Luogu P1001
- 【NOIP考前题目回顾】Luogu P1040
- 【NOIP考前题目回顾】Luogu P1003
- 【NOIP考前题目回顾】Luogu P1046
- 【NOIP考前题目回顾】Luogu P1005
- 【NOIP考前题目回顾】Luogu P1047
- 【NOIP考前题目回顾】Luogu P1005
- 【NOIP考前题目回顾】Luogu P1012
- 面试题目回顾6
- NOIP2005试题题目名称
- [NOIP2017 考前胡写]一年以来犯的各种无脑错误与经验总结
- ◆竞赛题目◆◇NOIP 2017 普及组◇ Chess 棋盘
- 竞赛题目讲解-【NOIP2000提高组】乘积最大
- noip2011提高组初赛(答案+选择题题目+个人分析)
- 16.1116 NOIP 考前模拟(信心题)
- ◆竞赛题目◆◇NOIP2016普及组◇ 魔法阵
- 【NOIP】NOIP考纲总结+NOIP考前经验谈
- oj题目回顾(2284)将字符串格式化后输出(串)
- 【noip题目代码】魔法阵;模拟,iterator,