USACO21FEB Modern Art 3 G

这篇具有很好参考价值的文章主要介绍了USACO21FEB Modern Art 3 G。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

P7414 [USACO21FEB] Modern Art 3 G

题目大意

给你一个长度为 n n n的数组,要求你在一个全部为 0 0 0的数组中每次将一个区间 [ i , j ] [i,j] [i,j]赋为同一个值,当前的赋值可以覆盖之前的值,求最少要赋值多少次才能使这个数组与给定数组相同。

1 ≤ n ≤ 300 1\leq n\leq 300 1n300


题解

可以使用区间DP。

f i , j f_{i,j} fi,j为赋值完区间 [ i , j ] [i,j] [i,j],使得这一段区间与给定数组相同的最少赋值次数,则转移式为

f i , j = f i , k + f k + 1 , j − ( a i = = a j ) f_{i,j}=f_{i,k}+f_{k+1,j}-(a_i==a_j) fi,j=fi,k+fk+1,j(ai==aj)

其中 i ≤ k < j i\leq k<j ik<j

如果一段区间 [ i , j ] [i,j] [i,j]的两端相同,显然可以先赋值 [ i , j ] [i,j] [i,j]再去赋值 [ i + 1 , j − 1 ] [i+1,j-1] [i+1,j1]。如果区间 [ i + 1 , j − 1 ] [i+1,j-1] [i+1,j1]中有一个点 k k k i i i在给定数组上的值相同且在赋值完 [ i , j ] [i,j] [i,j]后不需处理,会在 f i , k f_{i,k} fi,k中被统计;如果 k k k j j j的在给定数组上的值相同,会在 f k , j f_{k,j} fk,j中被统计。这样做可以保证所有可能都会被统计。

初始值 f i , i = 1 f_{i,i}=1 fi,i=1 f i , j = + ∞ ( i < j ) f_{i,j}=+\infty(i<j) fi,j=+(i<j),答案为 f 1 , n f_{1,n} f1,n

时间复杂度为 O ( n 3 ) O(n^3) O(n3)文章来源地址https://www.toymoban.com/news/detail-697952.html

code

#include<bits/stdc++.h>
using namespace std;
int n,a[305],f[305][305];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		f[i][i]=1;
	}
	for(int l=2;l<=n;l++){
		for(int i=1,j=l;j<=n;i++,j++){
			f[i][j]=1e9;
			for(int k=i;k<j;k++){
				f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]-(a[i]==a[j]));
			}
		}
	}
	printf("%d",f[1][n]);
	return 0;
}

到了这里,关于USACO21FEB Modern Art 3 G的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • P2730 [USACO3.2] 魔板 Magic Squares 题解

    夜深人静的夜晚,我开了这道题。看起来,完成它是一件轻而易举的事。我想了想,打开Dev-C++,开始写代码。 然而,那时的我还不知道,我踏入了深渊...... 咳咳,中二病犯了,前面的文字请忽略。 题目要求最少操作次数,显然,我们要使用BFS来求解。 对于每个节点,接下

    2024年02月13日
    浏览(23)
  • 【题解】JZOJ6578 / 洛谷P5201[USACO2019Jan]Shortcut G

    洛谷 P5201 [USACO19JAN] Shortcut G 在一个带权无向连通图上,每个点有 a i a_i a i ​ 只奶牛,奶牛会走最短路径到 1 1 1 ,如果有多条路径,选择字典序最小的,定义移动总时间为所有奶牛走到 1 1 1 的时间之和。你可以修建一条从任意一点到 1 1 1 的边权为 t t t 的边,奶牛只有在平时

    2024年02月11日
    浏览(22)
  • [USACO11MAR] Brownie Slicing G题解(二分+二维前缀和+矩阵分割)

    题目地址 P3017 [USACO11MAR] Brownie Slicing G 二分最大化最小值 切割思路: 一行一行进行切割,如果这一行可以切割出b块大于等于mid的块,就开始切割下一行 如果无法切割出b块,就把正在切割的行与下一行拼起来一起切割 最后通过能切割出b块的水平块块够不够a条来判断m是否合

    2024年02月07日
    浏览(26)
  • LeetCode第21~25题解

    【题目描述】 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 【示例1】 【示例2】 【示例3】 【提示】 两个链表的节点数目范围是 [0, 50] − 100 ≤ N o d e . v a l ≤ 100 -100le Node.valle 100 − 100 ≤ N o d e . v a l ≤ 100 l1 和

    2024年02月11日
    浏览(30)
  • C语言 | Leetcode C语言题解之第21题合并两个有序链表

    题目: 题解:

    2024年04月12日
    浏览(30)
  • Modern C++ code snippets

    目录 1. 限制模板函数的模板参数类型  2. CRTP (Curiously Recurring Template Pattern) 3. 元编程+insights 4. 完美转发 5. 工厂模式 6. Lamdba表达式 7. RAII - 自动释放资源 8. 其它小伎俩  CRTP + std::enable_shared_from_this 元编程不易理解,有个在线平台可以看到模板展开的样子 此思想经常用来加解锁

    2024年02月02日
    浏览(23)
  • Modern C++ 一个例子学习条件变量

    目录 问题程序 施魔法让BUG浮出水面 条件变量注意事项 修改程序 今天无意中看到一篇帖子,关于条件变量的,不过仔细看看发现它并达不到原本的目的。 程序如下,读者可以先想想他的本意,以及有没有问题: OK,本意显然是: 从1开始打印整数 线程t1, 打印非5的倍数 线程

    2024年01月20日
    浏览(29)
  • Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Feb 2023)

    Windows 11, version 22H2,2023 年 2 月 更新 请访问原文链接:https://sysin.org/blog/windows-11/,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org 全新 Windows 体验,让您与热爱的人和事物离得更近。 获得全新视角 Windows 11 提供一个让人平静而富有创意的空间,全新体验引

    2024年02月04日
    浏览(49)
  • Modern C++ std::mutex底层原理

    我时常有这样的疑问: std::mutex怎么就能保证后面的语句100%安全哪? CPU reordering就不会把这些语句重排到mutex前面执行? 而且各个CPU都是有L1、L2缓存的,如果mutex后面要访问的的变量在这些缓存中怎么办? 带着这些疑问我们先看看std::mutex是怎么实现的。 先给个图,再细说。

    2024年01月17日
    浏览(29)
  • 会不会激发对modern c++的新兴趣

    可变参数好像很厉害的样子,会节省很多手写代码,让编译器自动帮我们生成代码 templatetypename Fun, typename...Args void invoke(Fun fun, Args...args) {     fun(std::forwardArgs(args)...); } 任意函数包装器,搞个面向切面,代理,信手拈来 仿照C#的委托 templatetypename Fun class my_delegate { public:   

    2024年02月10日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包