C++笔试强训day22

目录

1.添加字符

2.数组变换

3.装箱问题

常规一维优化:


1.添加字符

链接

因为lenA <= lenB <= 50,因此可以无脑暴力解题:

遍历所有符合条件的匹配方法,找出最小的不同的数量,即最大的相同的数量

cpp 复制代码
#include <iostream>
using namespace std;
int main() {
	string A;
	string B;
	cin >> A >> B;
	int c1 = A.size();
	int c2 = B.size();
	int cnt = 0;
	if (c1 == c2)
	{
		for (int i = 0; i < c1; i++)
		{
			if (A[i] != B[i])
				cnt++;
		}
		cout << cnt << endl;
	}
	else
	{
		int dif = c2 - c1;
		int max_n = 0;
		for (int i = 0; i <= dif; ++i)
		{	
			cnt = 0;
			int j = 0;
			int k = i;
			while (j < c1)
			{
				if (A[j] == B[k])
					cnt++;
				j++;
				k++;
			}
			max_n = max(max_n, cnt);
		}
		cout << c1 - max_n << endl;
	}
	return 0;
}

2.数组变换

链接

判断是否为2的n次方就好了。

cpp 复制代码
#include <iostream>
using namespace std;
int arr[60];
int main() {
	int n;
	cin >> n;
	int maxn = 0;
	int x;
	for (int i = 1; i <= n; ++i)
	{
		cin >> x;
		arr[i] = x;
		maxn = max(maxn, x);
	}
	for (int i = 1; i <= n; ++i)
	{
		if (!((maxn / arr[i]) % 2 == 0 || arr[i] == maxn))
		{
			cout << "NO" << endl;
			return 0;
		}
	}
	cout << "YES" << endl;
	return 0;
}

3.装箱问题

链接

01背包dp问题:

讲题意逆向转化为使装入的体积最大更好求解,最后返回时返回V - dpnV即可。

cpp 复制代码
#include <iostream>
using namespace std;

int V, n;
int v[20010];
int dp[40][20010];
int main()
{
	cin >> V >> n;
	for (int i = 1; i <= n; ++i)
		cin >> v[i];
	
	// 填表
	for (int i = 1; i <= n; ++i)
	{
		for (int j = 1; j <= V; ++j)
		{
			dp[i][j] = dp[i - 1][j];
			if (j >= v[i])
				dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - v[i]] + v[i]);
		}
	}
	cout << V - dp[n][V] << endl;
	return 0;
}
常规一维优化:
cpp 复制代码
#include <iostream>
using namespace std;

int V, n;
int v[20010];
int dp[20010];
int main()
{
	cin >> V >> n;
	for (int i = 1; i <= n; ++i)
		cin >> v[i];
	
	// 填表
	for (int i = 1; i <= n; ++i)
		for (int j = V; j >= v[i]; --j)
				dp[j] = max(dp[j], dp[j - v[i]] + v[i]);

	cout << V - dp[V] << endl;
	return 0;
}
相关推荐
码之气三段.3 小时前
edu158-B
c++
西安邮电大学3 小时前
分治算法详细讲解
java·后端·其他·算法·面试
code bean4 小时前
平衡相关性与多样性:推荐系统中的永恒博弈与 MMR 算法详解
算法
青梅橘子皮4 小时前
Linux---进程控制(2)(进程程序替换)
linux·c++·算法
Shan12054 小时前
经典问题——验证栈序列
数据结构·算法
chase_my_dream4 小时前
A-LOAM中scanRegistration.cpp详细讲解
c++·人工智能·自动驾驶
2501_906565124 小时前
勾股定理证明
算法
Shan12054 小时前
无向图的Hierholzer算法流程(二)
算法
王老师青少年编程4 小时前
2022年CSP-X复赛真题及题解(T1:独木桥)
c++·真题·csp·信奥赛·复赛·独木桥·csp-x
gihigo19984 小时前
基于蒙特卡洛的异常值剔除(RANSAC + MC置信区间)—MATLAB实现
开发语言·算法·matlab