首页 > 其他分享 >P7414 [USACO21FEB] Modern Art 3 G 题解

P7414 [USACO21FEB] Modern Art 3 G 题解

时间:2023-08-27 16:45:58浏览次数:39  
标签:Art P7414 int 题解 Modern len color USACO21FEB

思路

考虑区间 DP。

设 \(f_{i, j}\) 表示要刷到 \([i, j]\) 这一段的目标需要的最小次数。

对于 \(f_{i, j}\),

如果 \(color_i\) 与 \(color_j\) 相等,那么再子区间合并的时候就可以少刷一次,即 \(f_{i, j} = \min\limits_{k = i}^{j - 1}f_{i, k} + f_{k + 1, j} - 1\)。

否则 \(f_{i, j} = \min\limits_{k = i}^{j - 1}f_{i, k} + f_{k + 1, j}\)。

代码

#include <bits/stdc++.h>

using namespace std;

const int N = 310, INF = 0x3f3f3f3f;

int f[N][N];
int n, a[N];

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int len = 1; len <= n; len++) {
        for (int i = 1; i + len - 1 <= n; i++) {
            int j = i + len - 1;
            if (len == 1) f[i][j] = 1;
            else {
                f[i][j] = INF;
                for (int k = i; k < j; k++) {
                    if (a[i] == a[j]) f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j] - 1);
                    else f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j]);
                }
            }
        }
    }
    cout << f[1][n] << '\n';
	return 0;
}

标签:Art,P7414,int,题解,Modern,len,color,USACO21FEB
From: https://www.cnblogs.com/Yuan-Jiawei/p/17660457.html

相关文章

  • CSP-J2022初赛易错题解析
    7.假设字母表{a,b,c,d,e}在字符串出现的频率分别为10%,15%,30%,16%,29%。若使用哈夫曼编码方式对字母进行不定长的二进制编码,字母d的编码长度()位。A.1  B.2 C.2或3  D.3正解:画出哈夫曼树即可9.考虑由N个顶点构成的有向连通图,采用邻接矩阵的数据结构表示时,该矩阵中至......
  • CSP-J2020初赛易错题解析
    一.5. 正解:冒泡排序最少比较n-1次,即单调上升序列 10.5 个小朋友并排站成一列,其中有两个小朋友是双胞胎,如果要求这两个双胞胎必须相邻,则有()种不同排列方法?A.24 B.36 C.72 D.48错误原因:忘记乘上A(2,2)了正解:捆绑法,A(4,4)*A(2,2)=48 15.有五副不同颜色的手套(......
  • CSP-J2021初赛易错题解析
    12.由 1,1,2,2,3 这五个数字组成不同的三位数有()种。A.18 B.15 C.12 D.24正解:枚举法,枚举即可,共18种 15.有四个人要从A点坐一条船过河到B点,船一开始在A点。该船一次最多可坐两个人。已知这四个人中每个人独自坐船的过河时间分别为 1,2,4,8,且两个人坐船的......
  • 【题解】 P7077 [CSP-S2020] 函数调用(拓扑排序)
    题意题目给定了一个长度为\(n\)序列\(a\)与\(m\)个操作,操作一共有3种:1.给定\(x,y\),使\(a_x\)增加\(y\)。2.给定\(x\),使\(a\)中所有数全部乘上\(x\)。3.给出k个数\(c_1,c_2,...,c_k\),表示这个操作的任务是按照先后顺序执行编号为\(c_1,c_2,...,c_k\)的\(k\)的操作。最后,题目相......
  • P2049 魔术棋子题解
    思路设\(f_{i,j,k}\)表示从原点走到\((i,j)\)模\(m\)后的乘积为\(k\)的方案数。状态转移:\(f_{i,j,ka_{i,j}\bmodm}=f_{i-1,j,k}+f_{i,j-1,k}\)统计答案:\(f_{n,n,k}\)。代码#include<bits/stdc++.h>usingnamespacestd;constintN=110......
  • CSP-S2020初赛易错题解析
    二.1.4.将第14行的 d[i]<d[j] 改为 d[i]!=d[j],程序输出不会改变。()答案:正确解析:因为双层for会遍历所有情况,所以输出不会改变 2.4.当输入的 d[i]d[i] 是严格单调递减序列时,第17行的 swap 平均执行次数是()A.O(n^2) B.O(n) C.O(nlogn) D.O(logn)正......
  • CSP-J2019初赛易错题解析
    7.把 8 个同样的球放在 5 个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的分法?()提示:如果 8 个球都放在一个袋子里,无论是哪个袋子,都只算同一种分法。A.22B.24 C.18 D.20正解:使用枚举法,枚举所有合法情况,共18种 ......
  • P1385 密令题解
    思路我们发现两种操作都不会影响字符之和。考虑动态规划,设\(f_{i,j}\)表示在前\(i\)位,可以达到和为\(j\)的方案数。有\(f_{i,j}=\sum\limits_{k=0}^{25}f_{i-1,j-k}\)。最后记得\(-1\),表示去除原始字符串。代码#include<bits/stdc++.h>#defineintl......
  • CSP-S2019初赛易错题解析
    一.6.由数字 1,1,2,4,8,8 所组成的不同的 4 位数的个数是()A.104  B. 102  C. 98  D. 100错误原因:遗漏答案正解:使用穷举法,第一种ABCD型,共有A(4,4)=24种,第二种AABC型,共有A(4,2)*C(3,2)*2=72种,第三种AABB型,共有6种,总共是102种。 8.G 是一个非连通无向图(......
  • AT_agc030_d [AGC030D] Inversion Sum 题解
    AT_agc030_d[AGC030D]InversionSum题解题目大意给你一个长度为\(n\)的数列,然后给你\(q\)次交换操作,你每次可以选择操作或者不操作,问所有情况下逆序对的总和。(\(n,q\le3000\))分析很容易想到\(dp\),但是发现不好直接算方案。所以我们用一个小技巧,将求方案数转化为求......