藍橋杯 9241.飛機降落

這道題本來作者以為是可以用一些小技巧進行暴力解法的,但是后來試了一下,不能過去全部數據。

下面是對半個的題解:

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<cmath> 
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include<sstream>
#include<map>
#include<limits.h>
#include<set>
#define MAX 105
#define _for(i,a,b) for(int i=a;i<(b);i++)
#define ALL(x) x.begin(),x.end()
using namespace std;
typedef long long LL;
int n, m, counts=0;
LL A, B;
int res = 0;
struct fly {int times;int pan_xuan;int down;
};
fly a[MAX];
bool cmp(fly a, fly b) {return a.times + a.pan_xuan <= b.times + b.pan_xuan;
}
int main() {ios::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);cin >> n;int i = 0;while (n--){i = 0;cin >> m;while (m--) {int t, d, l;cin >> t >> d >> l;a[i].times = t;a[i].pan_xuan = d;a[i].down = l;i++;}sort(a, a + i, cmp);int flag = 1;int sum = 0;_for(j, 0, i) {if (j == 0)sum += a[j].times + a[j].down;else {if (sum <= a[j].times + a[j].pan_xuan) {sum += a[j].down;}else{flag = 0;break;}}}if (flag)cout << "YES" << endl;elsecout << "NO" << endl;}return 0;
}

作者這里犯了一個錯誤:每一個飛機都有可能是第一個降落的飛機,作者一開始認為是時刻上誰最早誰就先降落,結果并不是那個樣子。后面的大體思路其實是正確的。

那么后來就與大佬們討論一下,發現這個題也是一道DFS的暴力題。

OK,廢話不多說,那就開始;

注意這里作者認為,方便的話可以定義結構體進行題解。如果我們開3個數組處理起來會很麻煩。

1.我們看到,有飛機到達的時刻,和盤旋的時間,也就是可以等待的時間,最后就是降落的時間。我們可以得出來什么結論呢?剛開始,我們就可以知道飛機的最早降落時間和最晚降落時間(最早降落時間就是它到達飛機場的時刻,最晚降落時間就是到達時刻加上盤旋的時間),只要飛機在這個時間段之內就可以降落,也就是說,如果第i架飛機想要降落,首先需要知道前面得i-1架飛機降落后總共用到的時間。如果說是在這個時間范圍里,那么這個飛機就可以降落;否則不行。

2.我們開始考慮。因為每一架飛機都有可能是第一架飛機的降落,所以這就涉及到一個排序問題了。也就是說,我們可以把這個問題轉化為排序型遞歸的題目。那么,就需要有一個狀態函數來判斷是否選過這個飛機。OK,那么我們套上模板。終止條件就是當我們遍歷到最后一架飛機的時候就可以說是YES了。

有人問,不對呀,不應該是大于飛機的架數才可以嗎?假設我們需要降落三架飛機,如果前兩架都已經降落了,我們還需要再判斷第三架嗎?因為第三架都已經是最后一架飛機了,所以我們直接就可以認為這種可能性是可以的。

3.不要忘記,我們只是對于一個飛機深度搜索,我們需要從每一個飛機為起點這樣才能覆蓋到所有可能性。

注意:在dfs函數中,將要進行遞歸的時候我用了一個if else語句。這里為什么這樣判斷呢?你想一下,如果說我們前幾架飛機的降落時間還沒有下一架飛機的開始時刻多,那么也就是說,我們需要等到下架飛機最早下降的時刻才能進行降落;如果說在下一架飛機的那個允許時間范圍內,我們就可以直接接著剛剛已經用過的時間加上下架飛機的降落時間了。

上代碼:

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<cmath> 
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include<sstream>
#include<map>
#include<limits.h>
#include<set>
#define MAX 15
#define _for(i,a,b) for(int i=a;i<(b);i++)
#define ALL(x) x.begin(),x.end()
using namespace std;
typedef long long LL;
int n, m, counts=0;
LL A, B;
int res = 0;
int st[MAX];
bool flag = false;
struct fly {int times;int pan_xuan;int down;
};
fly a[MAX];
void dfs(int nums, int times) {if (nums == m) {flag = true;return;}for (int i = 1; i <= m; i++) {if (!st[i] && times > a[i].times + a[i].pan_xuan)return;if (!st[i] && times <= a[i].times + a[i].pan_xuan) {st[i] = 1;if (a[i].times > times)dfs(nums + 1, a[i].times + a[i].down);elsedfs(nums + 1, times + a[i].down);st[i] = 0;}}
}
int main() {ios::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);cin >> n;while (n--) {cin >> m;flag = false;_for(i, 1, m + 1) {cin >> a[i].times >> a[i].pan_xuan >> a[i].down;}_for(j, 1, m + 1) {st[j] = 1;dfs(1, a[j].times + a[j].down);st[j] = 0;}if (flag)cout << "YES" << endl;elsecout << "NO" << endl;}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719784.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719784.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719784.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

掌握 Python: 每個開發人員都應該知道的6個秘密技巧

無論你是一名經驗豐富的開發者還是剛踏入編程世界的新手&#xff0c;Python 很可能已經引起了你的興趣。 它功能強大、靈活多變&#xff0c;而且非常用戶友好&#xff01;但是&#xff0c;讓我們更進一步吧! 在這篇博客中&#xff0c;我將揭示一些隱藏的 Python 技巧&#xff0…

#QT(DEMO)

1.IDE&#xff1a;QTCreator 2.實驗&#xff1a;打印"hello wolrd" 3.記錄 &#xff08;1&#xff09;創建一個新工程&#xff1a; 新建好一個工程存放文件夾&#xff08;路徑不能有中文&#xff09;,然后按下圖配置 &#xff08;2&#xff09;點擊widgets.ui拖入以…

AIGC時代,程序員副業的必修課【提供免費指導,手把手實踐】

給自己的新課做個宣傳&#xff0c;限時6折&#xff0c;感興趣的可以聽一聽&#xff0c;完全干貨。提供課程購買訂單&#xff0c;可免費獲得21天從0到1全程上站指導。 《AIGC時代&#xff0c;程序員副業的必修課》 AIGC時代的到來&#xff0c;又是一個程序員的副業賺錢的好機會…

真香定律!我用這種模式重構了第三方登錄

分享是最有效的學習方式。 博客&#xff1a;https://blog.ktdaddy.com/ 老貓的設計模式專欄已經偷偷發車了。不甘愿做crud boy&#xff1f;看了好幾遍的設計模式還記不住&#xff1f;那就不要刻意記了&#xff0c;跟上老貓的步伐&#xff0c;在一個個有趣的職場故事中領悟設計模…

improve-echarts餅圖自適應(分辨率放大縮小)

1.echarts 本身存在放大縮小圖表不變的情況&#xff0c;要求要圖表適應分辨率&#xff0c;根據分辨率放大縮小來進行適應與響應式。 餅圖 <!-- 餅狀 --><div class"leftrcyle"><div class"ciclye"><div id"cicly" class&q…

2023人機交互期末復習

考試題型及分值分布 1、選擇題&#xff08;10題、20分&#xff09; 2、填空題&#xff08;10題、20分&#xff09; 3、判斷題&#xff08;可選、5題、10分&#xff09; 4、解答題&#xff08;5~6題、30分&#xff09; 5、分析計算題&#xff08;1~2題、20分&#xff09; 注意&…

PHP+MySQL實現后臺管理系統增刪改查之夠用就好

說明 最近要給博客弄個后臺&#xff0c;不想搞得很復雜&#xff0c;有基本的增刪改查就夠了&#xff0c;到網上找了一圈發現這個不錯&#xff0c;很實用&#xff0c;希望可以幫到大家&#xff0c;需要的朋友評論區留下郵箱&#xff0c;我安排發送。 演示效果 項目介紹 本項目…

Jetty使用入門

Jetty使用入門 社區當前推薦開發者使用Jetty 12.X版本。 依據End of Community Support for Jetty 9.x - June 2022&#xff0c;社區對Jetty 9.x的支持&#xff0c;已在2022年6月1日停止。 依據End of Community Support for Jetty 10 / Jetty 11 - January 2024&#xff0c;…

帶使能控制的鋰電池充放電解決方案

一、產品概述 TP4594R 是一款集成線性充電管理、同步升壓轉換、電池電量指示和多種保護功能的單芯片電源管理 SOC&#xff0c;為鋰電池的充放電提供完整的單芯片電源解決方案。 TP4594R 內部集成了線性充電管理模塊、同步升壓放電管理模塊、電量檢測與 LED 指示模塊、保護模塊…

關于python函數參數傳遞

參數傳遞 在 python 中&#xff0c;類型屬于對象&#xff0c;對象有不同類型的區分&#xff0c;變量是沒有類型的&#xff1a; 在下面的代碼示例重&#xff0c;[1,2,3] 是 List 類型&#xff0c;“qayrup” 是 String 類型&#xff0c;而變量 a 是沒有類型&#xff0c;它僅僅…

#WEB前端

1.實驗&#xff1a;vscode安裝&#xff0c;及HTML常用文本標簽 2.IDE&#xff1a;VSCODE 3.記錄&#xff1a; &#xff08;1&#xff09;網頁直接搜索安裝vscode &#xff08;2&#xff09;打開vscode&#xff0c;在下圖分別安裝以下插件&#xff1a; Html Css Support …

C++11線程同步之互斥鎖

C11線程同步之互斥鎖 std::mutex成員函數線程同步 std::lock_guardstd::recursive_mutexstd::timed_mutex 進行多線程編程&#xff0c;如果多個線程需要對同一塊內存進行操作&#xff0c;比如&#xff1a;同時讀、同時寫、同時讀寫對于后兩種情況來說&#xff0c;如果不做任何的…

《互聯網的世界》第四講-擁塞控制與編碼

需要澄清的一個誤區是&#xff0c;擁塞絕不是發送的數據量太大導致&#xff0c;而是數據在極短的時間段內到達了同一個地方以至于超過了網絡處理容量導致&#xff0c;擁塞的成因一定要考慮時間因素。換句話說&#xff0c;擁塞由大突發導致。 只要 pacing&#xff0c;再多的數據…

2024.3.4訓練記錄(8)

文章目錄 CF 459D Pashmak and Parmidas problemCF 1388C Uncle Bogdan and Country HappinessCF 1525D ArmchairsCF 220B Little Elephant and Array CF 459D Pashmak and Parmida’s problem 題目鏈接 最近感覺對數據結構題的反應度提升了&#xff0c;這一題是上午看的但是…

動態規劃(算法競賽、藍橋杯)--樹形DP樹形背包

1、B站視頻鏈接&#xff1a;E18 樹形DP 樹形背包_嗶哩嗶哩_bilibili #include <bits/stdc.h> using namespace std; const int N110; int n,V,p,root; int v[N],w[N]; int h[N],to[N],ne[N],tot; //鄰接表 int f[N][N];void add(int a,int b){to[tot]b;ne[tot]h[a];h[a…

數倉項目6.0(一)

尚硅谷大數據項目【電商數倉6.0】企業數據倉庫項目_bilibili 數據流轉過程 用戶??業務服務器??數據庫存儲??數倉統計分析??數據可視化 數據倉庫處理流程&#xff1a;數據源??加工數據??統計篩選數據??分析數據 數據庫不是為了數據倉庫服務的&#xff0c;需要…

B084-SpringCloud-Zuul Config

目錄 zuul系統架構和zuul的作用zuul網關實現配置映射路徑過濾器 Config概述云端管理本地配置 zuul zuul是分布式和集群后前端統一訪問入口 系統架構和zuul的作用 zuul把自己注冊進eureka&#xff0c;然后可通過前端傳來的服務名發現和訪問對應的服務集群 為了預防zuul單點故…

Java 枚舉類的深入理解與應用

Java 的枚舉類是一種特殊的類&#xff0c;通常表示一組常量。在編譯或設計時&#xff0c;當我們知道所有變量的可能性時&#xff0c;盡量使用枚舉類型。本文將通過一個具體的例子&#xff0c;深入探討 Java 枚舉類的定義、使用和高級特性。 目錄 枚舉類的定義與使用枚舉類的構造…

【OJ】求和與計算日期

文章目錄 1. 前言2. JZ64 求123...n2.1 題目分析2.2 代碼 3. HJ73 計算日期到天數轉換3.1 題目分析3.2 代碼 4. KY222 打印日期4.1 題目分析4.2 代碼 1. 前言 下面兩個題目均來自牛客&#xff0c;使用的編程語言是c&#xff0c;分享個人的一些思路和代碼。 2. JZ64 求123…n …

Vue 賦值后原數據隨賦值后的數據的變化而變化

很常見的&#xff0c;當我們直接用“”號等方式直接賦值后 原數據會隨賦值后的數據的變化而變化 但是有時候我們的需求是不需要原數據跟隨變化 所以怎么解決呢&#xff1f; 解決辦法有&#xff1a; 1.使用Object.assign() 方法 2.使用深拷貝函數 JSON.parse() 3.使用第三方庫lo…