ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

方格取数

2021-04-08 21:33:52  阅读:181  来源: 互联网

标签:int cin long 取数 方格 tie define


方格取数

  • k为横纵坐标之和, 可以省去一维.
  • 这两遍走法是互相无影响的.
  • 如果会同时走上同一个坐标, 这个坐标的值就只加一次就好了, 这样就表示了第二走的值为0
#include <bits/stdc++.h>
using namespace std;
#define IO ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);
inline int lowbit(int x) { return x & (-x); }
#define ll long long
#define ull unsigned long long
#define pb push_back
#define PII pair<int, int>
#define VIT vector<int>
#define x first
#define y second
#define inf 0x3f3f3f3f
const int N = 15;
int w[N][N];
int f[N << 1][N][N];
int dx[4][2] = { {0, 0}, {0, -1}, {-1, 0}, {-1, -1} };

int main() {
    //freopen("in.txt", "r", stdin);
    IO;
    int n; 
    cin >> n;
    int x, y, c;
    while (cin >> x >> y >> c, x || y || c) w[x][y] = c;
    for (int k = 2; k <= 2 * n; ++k) 
        for (int i1 = 1; i1 <= n; ++i1)
            for (int i2 = 1; i2 <= n; ++i2) {
                int j1 = k - i1, j2 = k - i2;
                if (j1 && j1 <= n && j2 && j2 <= n) {
                    int v = w[i1][j1];
                    if (i1 != i2) v += w[i2][j2];
                    int &x = f[k][i1][i2];
                    for (int p = 0; p < 4; ++p)
                        x = max(x, f[k - 1][i1 + dx[p][0]][i2 + dx[p][1]] + v);
                }
            }
    cout << f[n << 1][n][n] << '\n';
    return 0; 
}


标签:int,cin,long,取数,方格,tie,define
来源: https://www.cnblogs.com/phr2000/p/14634963.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有