首页 > 其他分享 >ABC264F 题解

ABC264F 题解

时间:2024-07-27 16:51:21浏览次数:9  
标签:int 题解 col 操作 oplus times ABC264F

题面

注意到操作只对当前行/列有效,所以只要记录当前所在行和列是否有被操作。

设 \(f(i,j,x,y)\) 表示到了位置 \((i,j)\),第 \(i\) 行是否被操作,第 \(j\) 列是否被操作的最小代价。

转移:

设 \(col = c(i,j) \oplus x \oplus y\)。

\[\begin{aligned} f(i + 1,j,x2,y) &\xleftarrow{getmin} f(i,j,x,y) + (c(i + 1,j) \oplus y \oplus col) \times a_{i + 1}\\ f(i,j + 1,x,y2) &\xleftarrow{getmin} f(i,j,x,y) + (c(i,j + 1) \oplus x \oplus col) \times b_{j + 1}\\ \end{aligned} \]

\(col\) 为当前格子颜色,计算出下一行/下一列是否需要操作,加上代价即可。


注意答案的计算和初始值。


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N = 2005;
ll f[N][N][2][2];
bool c[N][N];
int a[N], b[N], n, m;

signed main()
{
    ios::sync_with_stdio(0);cin.tie(0);
    cin >> n >> m;
    for(int i = 1; i <= n; i ++) cin >> a[i];
    for(int i = 1; i <= m; i ++) cin >> b[i];
    for(int i = 1; i <= n; i ++)
    {
        string s; cin >> s;
        for(int j = 1; j <= m; j ++) c[i][j] = s[j - 1] == '1';
    }
    memset(f, 0x3f, sizeof f);
    f[1][1][0][0] = 0;
    f[1][1][0][1] = b[1];
    f[1][1][1][0] = a[1];
    f[1][1][1][1] = a[1] + b[1];
    for(int i = 1; i <= n; i ++)
    for(int j = 1; j <= m; j ++)
    {
        for(int x : {0, 1})
        for(int y : {0, 1})
        {
            int col = c[i][j] ^ x ^ y;
            int x2 = c[i + 1][j] ^ y ^ col;
            int y2 = c[i][j + 1] ^ x ^ col;
            f[i + 1][j][x2][y] = min(f[i + 1][j][x2][y], f[i][j][x][y] + x2 * a[i + 1]);
            f[i][j + 1][x][y2] = min(f[i][j + 1][x][y2], f[i][j][x][y] + y2 * b[j + 1]);
        }
    }
    cout << min({f[n][m][0][0], f[n][m][0][1], f[n][m][1][0], f[n][m][1][1]});

    return 0;
}

标签:int,题解,col,操作,oplus,times,ABC264F
From: https://www.cnblogs.com/adam01/p/18327143

相关文章

  • ABC265F 题解
    题面\(O(nd^2)\)考虑\(f(i,j,k)\)表示dp到第\(i\)维,距离\(p,q\)曼哈顿距离\(j,k\)的方案数。考虑朴素转移:设\(dis=|p_{i+1}-q_{i+1}|\)。\[\begin{aligned}f(i+1,j+t,k+dis-t)&\getsf(i,j,k)&(0\leqt\leqdis)\quad&(1)\\f(i+1,j+d+t,k+t)&\ge......
  • 题解:CF1608F MEX counting
    题解:CF1608FMEXcounting与其他题解不同,本篇题解是运用辅助数组$g$来解决问题。虽然代码可能要繁琐一点,但是辅助数组的思路适用范围更广一点。首先还是转化为前$i$个数的$mex$在区间$[l_i,r_i]$内。我们用dp数组$f_{i,x,c}$表示处理到了第$i$个数,当前的mex为......
  • CF605E Intergalaxy Trips 题解
    Description\(n\)个点的有向完全图。\(i\toj\)的边每天出现的概率均为\(p_{i,j}\),若\(i=j\),有\(p_{i,j}=1\)。每天可以选择一条存在的出边走过去或停留在原地不动。求最优策略下从\(1\)到\(n\)的期望天数。\(n\le10^3\)。Solution设\(f_i\)表示\(i\)......
  • [题解]P2672 [NOIP2015 普及组] 推销员
    P2672[NOIP2015普及组]推销员为了便于操作,将住户信息按疲劳值从大到小排序。那么对于选\(X\)个住户,有\(2\)种情况:选疲劳值前\(X\)大的住户,答案即为\(\sum\limits_{i=1}^Xa[i]+2\times\max\limits_{i=1}^Xs[i]\)。选疲劳值前\(X-1\)大的住户,然后在剩下的住户中,距离比......
  • 《梦醒蝶飞:释放Excel函数与公式的力量》21.2 问题解决策略
     第21章:综合案例分析 21.2问题解决策略在综合案例分析中,解决问题的策略涉及多个步骤,从问题的识别、分析到实施解决方案和评估效果。通过系统的方法和多学科的知识,可以高效地解决复杂的问题。以下将介绍一个具体案例,并通过详细的步骤展示如何制定和实施问题解决策略。案例......
  • Codeforce 962 Div3 C~E 题解
    C题目大意​给定两个字符串a,b,q个询问,每次操作可以将a[i]赋值为任意一个字符,每次询问[l,r]区间内使得sorted(a[l,r])==sorted(b[l,r])的最小操作次数分析​ 不妨先考虑一个区间如何判断sorted后的字串是否相等,发现跟字符出现的次数有关,于是考虑前缀和预处理每一个26......
  • ABC273F Hammer 题解
    ABC273FHammer题解题目大意数轴上有\(n\)个锤子和\(n\)堵墙,第\(i\)个锤子位于\(x_i\),第\(i\)堵墙位于\(y_i\),第\(i\)个锤子可以对应的敲开第\(i\)堵墙。以原点为起点,给定终点\(t\),问最少移动多少个单位长度才能走到\(t\)。必须拿到对应锤子敲开墙才能走过这堵......
  • Codeforces Round 962 (Div. 3) 题解
    A.Legshttps://codeforces.com/contest/1996/problem/A翻译:农夫约翰的农场又迎来了美好的一天。农夫约翰来到农场后,数了数n条腿。众所周知,农场里只住着鸡和牛,一只鸡有2条腿,而一头牛有4条腿。假设约翰农场主数清了所有动物的腿,那么他的农场里最少有多少动物?思路求最少......
  • stata 代码实现熵值法计算 含常见问题解答
    适用:面板数据均可stata版本:无要求例如,使用了一个10年的省级面板数据,含15个指标,现在来计算各地区的熵值法得分。其中,x1x2x3x4x6x7x8x9x11x12x13x14x15是正向指标;而x5x10是负向指标。1.定义面板,定义指标的正负。tssetidyearglobalxlist1"x1x2x3x4x6x......
  • CF585F Digits of Number Pi 题解
    Description给定长度为\(n\)的数字串\(s\)和长度为\(d\)的不含前导零的数字串\(x,y(x\ley)\)。求存在长度至少为\(\left\lfloor\frac{d}{2}\right\rfloor\)的子串是\(s\)的子串的数字串\(t\in[x,y]\)的数量。\(n\le10^3\),\(d\le50\),答案对\(10^9+7\)取......