[AcWing 187] 导弹防御系统

image
image


点击查看代码
#include<iostream>

using namespace std;

const int N = 60;

int n, res;
int a[N], up[N], down[N];

void dfs(int u, int su, int sd)
{
	if (su + sd >= res)	return ;
	else if (u == n + 1) {
		res = min(res, su + sd);
		return ;
	}
	int k = 0;
	while (k < su && up[k] >= a[u])  k ++;
	if (k < su) {
		int t = up[k];
		up[k] = a[u];
		dfs(u + 1, su, sd);
		up[k] = t;
	}
	else {
		up[k] = a[u];
		dfs(u + 1, su + 1, sd);
	}
	k = 0;
	while (k < sd && down[k] <= a[u])  k ++;
	if (k < sd) {
		int t = down[k];
		down[k] = a[u];
		dfs(u + 1, su, sd);
		down[k] = t;
	}
	else {
		down[k] = a[u];
		dfs(u + 1, su, sd + 1);
	}
} 

int main()
{
	while (cin >> n, n) {
		for (int i = 1; i <= n; i ++)	cin >> a[i];
		res = n;
		dfs(1, 0, 0);
		cout << res << endl;
	}
	return 0;
} 

  1. DFS, 迭代加深, 剪枝
    对于每个点,枚举在上升子序列和下降子序列两种情况,通过 dfs 搜索最优解
posted @   wKingYu  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
欢迎阅读『[AcWing 187] 导弹防御系统』
点击右上角即可分享
微信分享提示