首页 > 其他分享 >[2017 ICPC Nanning] Rake It In

[2017 ICPC Nanning] Rake It In

时间:2024-08-29 20:04:29浏览次数:5  
标签:return int res Nanning Rake ++ swap using 2017

https://ac.nowcoder.com/acm/contest/32183/A

一个很有意思的搜索,先手希望结果尽可能的大,后手希望结果尽可能的小。所以在枚举的时候,先后手的策略是不一样的。

#include <bits/stdc++.h>

using namespace std;

using i32 = int32_t;
using i64 = long long;
using ldb = long double;

const i32 inf = INT_MAX / 2;
const i64 INF = LLONG_MAX / 2;

#define int i64

using vi = vector<int>;

int a[4][4], k;

int query(int x, int y) {
    return a[x][y] + a[x + 1][y] + a[x][y + 1] + a[x + 1][y + 1];
}

void change1(int x, int y) {
    swap(a[x][y], a[x][y + 1]);
    swap(a[x][y + 1], a[x + 1][y + 1]);
    swap(a[x + 1][y], a[x + 1][y + 1]);
}

void change2(int x, int y) {
    swap(a[x][y], a[x][y + 1]);
    swap(a[x][y], a[x + 1][y]);
    swap(a[x + 1][y], a[x + 1][y + 1]);
}

int dfs(int i) {
    if (i == k) return 0;
    if (i & 1) {
        int res = inf;
        for (int x = 0; x < 3; x++)
            for (int y = 0; y < 3; y++) {
                change1(x, y);
                res = min(res, dfs(i + 1) + query(x, y));
                change2(x, y);
            }
        return res;
    } else {
        int res = -inf;
        for (int x = 0; x < 3; x++)
            for (int y = 0; y < 3; y++) {
                change1(x, y);
                res = max(res, dfs(i + 1) + query(x, y));
                change2(x, y);
            }
        return res;
    }
}

void solve() {
    cin >> k, k *= 2;
    for (int i = 0; i < 4; i++)
        for (int j = 0; j < 4; j++)
            cin >> a[i][j];
    cout << dfs(0) << "\n";
}

i32 main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
    int T;
    cin >> T;
    while (T--)
        solve();
    return 0;
}

标签:return,int,res,Nanning,Rake,++,swap,using,2017
From: https://www.cnblogs.com/PHarr/p/18387485

相关文章

  • AT_ddcc2017_final_d なめらかな木 题解
    首先考虑暴力DP,设\(f(i,v_1,v_2,now)\)为已经将前\(i\)个数填入,\(i\)填在\(v_1\),\(j\)填在\(v_2\)点,已经填完点的状态是\(now\)(状压一下存在一个longlong里)的方案数。转移时直接枚举下一个点暴力转移,只需要保证新的点没有被访问过,并且填上新点后,\(v_1\)的所有邻接......
  • P4655 [CEOI2017] Building Bridges
    题意思路设\(sum_i=\sum\limits_{j=1}^iw_j\)。可以得到转移方程\(f_i=f_j+(h_i-h_j)^2+sum_i-sum_j\)。转化为\(y=kx+b\)的形式:\(f_i=f_j+(h_i-h_j)^2+sum_i-sum_j=f_j+h_i^2+h_j^2-2h_ih_j+sum_i-sum_j=(-2h_ih_j)+......
  • AT_code_festival_2017_qualc_d - Yet Another Palindrome Partitioning 题解
    YetAnotherPalindromePartitioning题解题目大意给出一个字符串,求把这个字符串划分成最少的小段,使每个小段都可以经过字母重组后为回文串。题目分析如果暴力的话,需要DFS段数、每一段的左节点、右节点,以及判断是否为回文串,时间复杂度在\(O(|S|^{|S|})\)左右。但是本......
  • 题解:AT_joisc2017_f 鉄道旅行 (Railway Trip)
    题意鉄道旅行(RailwayTrip)分析非常神仙的倍增做法。我们设\(l_{i,j}\)表示从\(i\)点出发,停靠\(2^j\)站后能抵达的最左位置。同理设\(r_{i,j}\)表示从\(i\)点出发,停靠\(2^j\)站后能抵达的最右位置。考虑如何更新这两个状态。因为可以走回头路,所以简单的\(l......
  • 题解:P5680 [GZOI2017] 共享单车
    题目分析出题人是擅长隐藏题意的建树首先给你一张无向图,然后指定一个根节点\(k\),从根节点开始沿最短路到每一个节点。如果到某个节点有多条最短路径,选择上一个节点编号最短的。考虑记录前驱的Dijkstra。namespaceDJ{intdis[maxn],pre[maxn],val[maxn],vis[maxn]......
  • [COCI2017-2018#5] Planinarenje
    这道题目是二分图博弈的板子介绍一下二分图博弈:设两部的节点分别为\(x_1,x_2,...,x_n\)和\(y_1,y_2,...,y_m\),先手选择了\(x_i\)这个节点,则先手必胜当且仅当\(x_i\)是最大匹配的必须点(也就是说少了\(x_i\)的话最大匹配数会减少)证明:任选一个最大匹配,则\(x_i\)为匹配点,先手的策......
  • YSP_refs_cn_2017_其他关节炎及PsO
    rhTNFR-Fc中文文献-2017-其他炎性关节炎及PsO 银屑病关节炎 随机对照试验[1][1] 桂银莉,史丽璞,郇稳,等.益赛普联合甲氨蝶呤治疗银屑病关节炎34例临床效果观察.北方药学,2017,14(9):143-144.浏览文摘 银屑病病例对照[2][2] 张杰,李江涛,邓文郁,等.......
  • YSP_refs_cn_2017_适应症外及基础研究
    rhTNFR-Fc中文文献-2017-适应症外和基础研究 探索适应症外 案例报道[1-10][1] 杨丽颖,马俊兵.重组人Ⅱ型肿瘤坏死因子受体-抗体融合蛋白治疗红皮病性银屑病的疗效观察.中国医疗美容,2017,7:33-35.浏览文摘[2] 李赛燕.益赛普治疗白塞病的临床分析.现代养生(下半月......
  • YSP_refs_cn_2017_RA
    rhTNFR-Fc中文文献-2017-RA 类风湿关节炎 随机对照试验[1-8][1] 黄达奇.甲氨蝶呤联合益赛普对类风湿关节炎的治疗价值探析.中国保健营养,2017,27:320.浏览文摘[2] 黄源.益赛普联合甲氨蝶呤治疗中重度活动性类风湿关节炎的疗效和安全性评价.医学临床研究,2017,......
  • YSP_refs_cn_2017_SpA
    rhTNFR-Fc中文文献-2017-SpA 脊柱关节炎 随机对照试验[1-10][1] 符维广,李浩鹏.重组人Ⅱ型肿瘤坏死因子受体-抗体融合蛋白治疗强直性脊柱炎的临床效果.中国医药导报,2017,14(6):112-115..浏览文摘[2] 贺冬冬,何岚,张薇,等.关节腔注射益赛普治疗膝关节受累的......