首页 > 其他分享 >P9344 去年天气旧亭台 代码

P9344 去年天气旧亭台 代码

时间:2023-05-21 19:55:23浏览次数:43  
标签:int 亭台 代码 long P9344 include scanf lld

不带滚动数组代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#define int long long

using namespace std;

const int N = 2000010;
int a[N], c[N], T, n, f[N];

signed main() {
	scanf("%lld", &T);
	while (T -- ) {
		memset(f, 0, sizeof f);
		scanf("%lld", &n);
		for (int i = 1; i <= n; i ++ )
			scanf("%lld", &a[i]);
		for (int i = 1; i <= n; i ++ )
			scanf("%lld", &c[i]);
		int min0 = 1e10, min1 = 1e10;
		for (int i = 1; i <= n; i ++ ) {
			f[i] = f[i - 1] + a[i] + a[i]; // 只选择这一个打扫
			if (c[i] == 0) f[i] = min(f[i], min0 + a[i]);
			if (c[i] == 1) f[i] = min(f[i], min1 + a[i]);
			if (c[i] == 0) min0 = min(min0, f[i - 1] + a[i]);
			if (c[i] == 1) min1 = min(min1, f[i - 1] + a[i]);
		}
		printf("%lld\n", f[n]);
	}
	return 0;
}

带滚动数组代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#define int long long

using namespace std;

const int N = 2000010;
int a[N], c[N], T, n, f[2];

signed main() {
	scanf("%lld", &T);
	while (T -- ) {
		f[0] = f[1] = 0;
		scanf("%lld", &n);
		for (int i = 1; i <= n; i ++ )
			scanf("%lld", &a[i]);
		for (int i = 1; i <= n; i ++ )
			scanf("%lld", &c[i]);
		int min0 = 1e10, min1 = 1e10;
		int now = 1;
		for (int i = 1; i <= n; i ++ ) {
			f[now] = f[now ^ 1] + a[i] + a[i]; // 只选择这一个打扫
			if (c[i] == 0) f[now] = min(f[now], min0 + a[i]);
			if (c[i] == 1) f[now] = min(f[now], min1 + a[i]);
			if (c[i] == 0) min0 = min(min0, f[now ^ 1] + a[i]);
			if (c[i] == 1) min1 = min(min1, f[now ^ 1] + a[i]);
			now ^= 1;
		}
		printf("%lld\n", f[now ^ 1]);
	}
	return 0;
}

标签:int,亭台,代码,long,P9344,include,scanf,lld
From: https://www.cnblogs.com/LcyRegister/p/17419057.html

相关文章

  • 第二十篇——通达信自动提示启明星、黄昏星K线组合形态(含指标公式代码)(从零起步编写通
    内容提要:本文主要介绍了启明星(早晨之星)和黄昏星(黄昏之星)K线组合形态的概念以及启明星和黄昏星通达信指标公式的写法,并设置K线颜色,添加文字标记。 一、启明星(也称早晨之星) 启明星K线组合形态是一种反转信号,出现在下降趋势或者回调中,由三根K线组成。第一根K线是大阴线......
  • #球钟算法题解以及代码完成
    球钟问题描述:球钟是一个利用球的移动来记录时间的简单装置。它有三个可以容纳若干个球的指示器:分钟指示器,五分钟指示器,小时指示器。若分钟指示器中有2个球,5分钟指示器中有6个球,小时指示器中有5个球,则时间为5:32。       工作原理:每过一分钟,球钟就会从球队列的队首......
  • CV攻城狮入门VIT(vision transformer)之旅——VIT代码实战篇
    ......
  • 洛谷 P9344. 去年天气旧亭台
    去年天气旧亭台题目背景依旧是过往的天气,过往的楼台烟雨。时间悄悄流逝着,山河仍在,人却已不是过去的人……题目描述登上楼台,旧时满面沉灰的地板映入眼帘。共有$n$块地板,地板分为两类,第$i$块地板的类别用$c_i$表示,积灰程度用$a_i$表示。注意$c_i$为$0$或$1$。现......
  • 【代码练习】一道题带你掌握二分查找
    二分查找解析:思路一:暴力解法,直接遍历,从头开始查找,如果找到直接返回下标,找不到返回-1。classSolution{public:intsearch(vector<int>&nums,inttarget){for(inti=0;i<nums.size();i++){if(nums[i]==target)......
  • 推荐几个好用的在线代码编译器
    程序员最喜欢用的在线IDE代码编译器,功能很强大,类别很全!1.网址https://tech.io/snippet支持20+种编程语言,页面上没有杂七杂八的东西,非常简约,非常干净,另外,它上面的代码段还可以嵌入到网页之中。2.网址https://www.tutorialspoint.com/codingground.htm它其实并不单单是一个在线......
  • 【代码随想录算法训练营第一天】704. 二分查找、27. 移除元素
    Day1-数组Leetcode704二分查找初解已经不记得二分查找了,遍历找O(n)其实也过了,只是借此复习一下二分,确实快很多。二分的前提条件题目里也都明示了:无重复,(从小到大)排序。我没有用到这个条件,自然时间复杂度高于最优解。看完解答我再看了一眼题目的标题,才知道是考BinarySearch嗯......
  • SQL ERVER 表转化为C#实体(SQL 代码)
    本文推出SqlServer表转化为实体的sql代码在VS中有可以自带生成实体类的快捷操作,但是生成的代码比较杂乱,很多东西都是不需要的,一个一个去敲又很浪费时间,关键太无聊了在闲暇之余写一份代码供大家学习,废话不多说,直接整干货:DECLARE@TableNamesysname='[dbo].[Orders]';--要生......
  • 源代码管理工具博客
    为了解决在软件开发过程中遇见的各种繁琐的问题,比如说无法实现多人同时开发,无法对代码进行合理保存,无法对比软件版本之间的差异……因此,诞生了各种各样的源代码管理工具:git,CVS,SVN,Clearcase,VSS等这些工具具有追踪项目全过程,记录内容的变化,方便查阅特定版本修订情况的功能......
  • java 递归拼接树形结构代码
    1、json数据(目标)[{label:'一级1',children:[{label:'二级1-1',children:[{label:'三级1-1-1'}]}]},{label:'一级2'......