【笔试训练】day11

ops/2024/10/21 6:23:48/

1.游游的水果大礼包

思路:

枚举。假设最后的答案是x个a礼包,y个b礼包,得到一个式子:ans=a*x+b*y

我们可以枚举x的数量,这样就能变相的把y的求出来。呃这就是鸡兔同笼问题嘛

x最大的范围是多少呢?也就是a礼包最多能做多少个,即min(n/2,m)

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
typedef long long LL;int main() {int n, m, a, b;cin >> n >> m >> a >> b;int k1 = min(n / 2, m);LL ans = 0;for (int i = 0; i <= k1; i++) {int nn = n - i * 2;int mm = m - i;int k2 = min(nn, mm / 2);ans = max(ans, (LL)a * i + b * k2);}cout << ans << endl;return 0;
}

2.买卖股票的最佳时机(二)

思路:

先求简单版本,再去看进阶。

首先是简单版本:用dp[i][0]表示第i天过后手里没有股票的最大收益,用dp[i][1]表示第i天过后手里有股票的最大收益.

对于第i天的状态一共有两个:

- 第i天过后手里没有股票的情况

    第i天没有股票,有可能第i-1天有股票,但是今天卖掉了,收益+a[i],也有可能第i-1天也没有股票。

   根据题意,这两种情况取一个最大值。所以dp[i][0]=max(dp[i-1][1]+a[i],dp[i-1][0])

- 第i天过后,手里有一支股票 .

    第i天有股票,有可能是第i-1天没有股票,今天买的,所以收益-a[i].也有可能第i-1天有股票,但是今天不卖。

     根据题意,这两种情况取一个最大值。所以dp[i][1]=max(dp[i-1][0]-a[i],dp[i-1][1])

最后的答案是dp[n][0]

代码1:

#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int dp[N][2];
int a[N];
int main() {int n;cin >> n;for (int i = 1; i <= n; i++)cin >> a[i];dp[1][0] = 0;dp[1][1] = -a[1];for (int i = 2; i <= n; i++) {dp[i][0] = max(dp[i - 1][1] + a[i], dp[i - 1][0]);dp[i][1] = max(dp[i - 1][0] - a[i], dp[i - 1][1]);}cout << dp[n][0];return 0;
}

 再来思考进阶。

进阶是要求空间复杂度为O(1),说明一个数组都不能开。也意味着,我们必须边读入边处理。

但是根据朴素版本的代码,我们可以知道,其实对于第i天的状态,它只会被第i-1天的状态影响。

于是我们可以用两个变量分别表示第i-1天的有票和没票的状态。再用两个变量表示第i天的有票和没票的状态。

每过一天,我们就迭代一下每一天的状态。

于是化简状态转移方程得:

  a2 = max(b1 + x, a1);b2 = max(a1 - x, b1);a1 = a2;//迭代b1 = b2;

a2就表示dp[i][0],a1表示dp[i-1][0],b1,b2同理。

代码1:

#include <iostream>
using namespace std;int main() {int n;cin >> n;int x;int a1 = 0;int a2 = 0;int b1 = 0;int b2 = 0;cin >> b1;b1 = -b1;//初始化第一天for (int i = 2; i <= n; i++) {cin >> x;a2 = max(b1 + x, a1);b2 = max(a1 - x, b1);a1 = a2;//迭代b1 = b2;}cout << a2 << endl;return 0;
}

3.倒置字符串

思路:

首先就是不要考虑什么标点,这是假信息。

剩下得就是简单的反转字符串,再反转每个单词。数据也小,随便暴力。

代码:

#include <iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;int main() {string str;getline(cin, str);string ans;int n = str.size();reverse(str.begin(), str.end());for (int i = 1, j = 0; i < n; i++) {if ((str[i] == ' ' && str[i - 1] != ' ') || i == n - 1) {string t = "";if (i != n - 1) {t = str.substr(j, i - j);} else {t = str.substr(j, i - j + 1);}reverse(t.begin(), t.end());ans += t;ans += ' ';j = i + 1;}}cout << ans << endl;return 0;
}


http://www.ppmy.cn/ops/15907.html

相关文章

人工智能在现代科技中的应用和未来发展趋势

人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;作为一种模拟人类智能的技术&#xff0c;已经在现代科技中得到广泛应用&#xff0c;并且在未来有着更大的发展潜力。 首先&#xff0c;人工智能在现代科技中的应用是非常广泛的。其中&#xff0c;最…

数据结构PT2——堆栈/队列

一、堆栈&#xff08;FILO&#xff09; 堆栈是一种线性结构&#xff0c;也是一种特殊的线性表 1:堆栈的顺序存储实现 栈的顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成 #define MaxSize typeof struct SNode *Stack struct SNode{ElementType Data[MaxSi…

【毕设绝技】基于 SpringCloud 的在线交易平台商城的设计与实现(一)

毕业设计是每个大学生的困扰&#xff0c;让毕设绝技带你走出低谷迎来希望&#xff01; 基于 SpringCloud 的在线交易平台商城的设计与实现 一、摘 要 随着互联网的快速发展&#xff0c;人们对商品经济的消费和思考不再停留在传统的经济模式上&#xff0c;网上购物商城是企业与…

面试二十二、跳表SkipLists

跳表全称为跳跃列表&#xff0c;它允许快速查询&#xff0c;插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)。快速查询是通过维护一个多层次的链表&#xff0c;且每一层链表中的元素是前一层链表元素的子集&#xff08;见右边的示意图&…

100-Python Django 在线电子商城

基于Django的在线电子商城开发实践 一、引言 随着互联网的快速发展&#xff0c;电子商务已经成为人们日常生活中不可或缺的一部分。在线电子商城作为电子商务的重要组成部分&#xff0c;为用户提供了便捷的购物体验。本文将以Python的Django框架为基础&#xff0c;介绍如何开…

Docker 网络与资源控制

一 Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c;Docker启动一个容器时会根 据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c;同时Docker网桥是每个容器的默 认网关。因为在同…

html渲染优先级

HTML渲染优先级主要涉及到浏览器如何解析和渲染HTML文档的过程。虽然具体的渲染顺序和优先级可能因浏览器的不同而有所差异&#xff0c;但大体上&#xff0c;HTML的渲染遵循以下基本步骤和原则&#xff1a; 解析HTML文档&#xff1a;浏览器首先会获取HTML文档&#xff0c;然后…

「笔试刷题」:dd爱框框

一、题目 题目描述 读入n&#xff0c;xn&#xff0c;xn&#xff0c;x,给出nnn个数a[1],a[2],……,a[n]a[1],a[2],……,a[n]a[1],a[2],……,a[n],求最小的区间[l,r][l,r][l,r]&#xff0c;使a[l]a[l1]……a[r]≥xa[l]a[l1]……a[r]≥xa[l]a[l1]……a[r]≥x&#xff0c;若存在相…