平板涂色

題目描述

CE數碼公司開發了一種名為自動涂色機(APM)的產品。它能用預定的顏色給一塊由不同尺寸且互不覆蓋的矩形構成的平板涂色。

為了涂色,APM需要使用一組刷子。每個刷子涂一種不同的顏色C。APM拿起一把有顏色C的刷子,并給所有顏色為C且符合下面限制的矩形涂色:

為了避免顏料滲漏使顏色混合,一個矩形只能在所有緊靠它上方的矩形涂色后,才能涂色。例如圖中矩形F必須在C和D涂色后才能涂色。注意,每一個矩形必須立刻涂滿,不能只涂一部分。

寫一個程序求一個使APM拿起刷子次數最少的涂色方案。注意,如果一把刷子被拿起超過一次,則每一次都必須記入總數中。

輸入輸出格式

輸入格式:

第一行為矩形的個數N。下面有N行描述了N個矩形。每個矩形有5個整數描述,左上角的y坐標和x坐標,右下角的y坐標和x坐標,以及預定顏色。

顏色號為1到20的整數。

平板的左上角坐標總是(0, 0)。

坐標的范圍是0..99。

N小于16。?

輸出格式:

文件中記錄拿起刷子的最少次數。

輸入輸出樣例

輸入樣例#1:?

7
0 0 2 2 1
0 2 1 6 2
2 0 4 2 1
1 2 4 4 2
1 4 3 6 1
4 0 6 4 1
3 4 6 6 2

輸出樣例#1:?

3

其實這道題就是一道妥妥的深搜,但還有一群大佬用DP,誒(其實我不打DP是因為,我根本就不會⊙﹏⊙),我們發現這道題有一個坑,如果上面沒有涂,就要先涂上面的。
代碼:
#include<bits/stdc++.h>
using namespace std;
struct str
{int a1,a2,b1,b2,color;
}a[111000];
int b1[11000]={0};//有沒有涂
int b[110][110],n,m,ans=999;
int b2[11000];//顏色數量 
int cmp(str x,str y)//排序 
{if(x.a1!=y.a1) return x.a1<y.a1;//在排橫列 return x.a2<y.a2;//先排縱列
}
bool cha(int x)
{for(int i=0;i<n;i++){if(b[x][i]&&!b1[i]) return false;//上面沒涂,反回false}return true;//反回true
}
void dfs(int x,int ji_lu,int sum)
{if(x>=ans)//如果當前的值大于你要找的值,那就不用找了呢!O(∩_∩)O~~ {return ;}if(sum==n)//涂完了{ans=x;return ;}for(int i=0;i<m;i++)//枚舉每一種顏色 {int h=0;if(b2[i]&&i!=ji_lu)//可以涂,有顏色涂,沒有被涂過 {for(int j=0;j<n;j++){//cha函數判斷上面有沒有被涂(顏色) if(!b1[j]&&a[j].color==i&&cha(j))//如果沒涂過,且能涂 {b1[j]=1;//記錄 h++;}else if(b1[j]&&a[j].color==i) b1[j]++;}if(h>0)//如果被涂了 {dfs(x+1,i,sum+h);//進行下一步 }for(int j=n-1;j>=0;j--)//回溯,不能上色 {if(b1[j]==1&&a[j].color==i&&cha(j)){b1[j]=0;h--;}else if(b1[j]>1&&a[j].color==i){b1[j]--;}}}}
}
int main()
{cin>>n;for(int i=0;i<n;i++){cin>>a[i].a1>>a[i].a2>>a[i].b1>>a[i].b2>>a[i].color;b2[a[i].color]++;//顏色的數量 }m=19;//從零開始 sort(a,a+n,cmp);//應為蒟蒻不會拓撲排序所以先排一下 for(int i=1;i<n;i++){for(int j=i-1;j>=0;j--){if(a[i].a1==a[j].b1&&((a[i].a2>=a[j].a2&&a[i].a2<=a[j].b2)||(a[i].b2>=a[j].a2&&a[i].b2<=a[j].b2))){b[i][j]=1;//如果i塊的最上面,且緊鄰j塊最下面,并且兩磚橫坐標有重疊部分,即i塊為j塊,緊鄰的那塊磚}}}dfs(0,0,0);cout<<ans;
}

  做完之后,我只想去出題人面前說一句話:午時已到。



轉載于:https://www.cnblogs.com/dai-jia-ye/p/9323687.html

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

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

相關文章

UVA - 1388 Graveyard 【數學】

題目鏈接 題意&#xff1a; 給一個周長為10000的圓&#xff0c;一開始有n個距離相等的點&#xff0c; 現在要添加m個點使其仍舊保持距離相等的狀態&#xff0c;問最小的移動距離。 思路&#xff1a; 遍歷原來的每一個點&#xff0c;找出離他最近的新的位置。 #include <map&…

Android API中被忽略的幾個函數接口

1. MotionEvent的幾個函數 下面的方法都支持多點觸摸&#xff0c;即可以對單個觸摸點調用下面的方法 1.1 getPressure() 這個api 可以獲取到手指觸摸屏幕時候的壓力,但是需要硬件和驅動支持... 它有助于我們做出更加擬物化的設計&#xff0c;比如&#xff1a; 1. 手繪。可以根據…

error while loading shared libraries: libstdc++.so.6: cannot open shared object file

查看誰提供這個.so yum whatprovides libstdc.so.6 yum install libstdc-4.8.5-28.el7.i686 #安裝上邊查出來的.so 此時如果出錯&#xff0c;最后一行是libstdc-4.8.5-28.el7.i686 ! libstdc-4.8.5-11.el7.x86_64 yum update libstdc-4.8.5-11.el7.x86_64 #更新一下,這個是上…

【轉】為控制臺窗口建立消息隊列

介紹Windows的窗口、消息、子類化和超類化 這篇文章本來只是想介紹一下子類化和超類化這兩個比較“生僻”的名詞。為了敘述的完整性而討論了Windows的窗口和消息&#xff0c;也簡要討論了進程和線程。子類化&#xff08;Subclassing&#xff09;和超類化&#xff08;Superclass…

hightmaps 按地圖上顯示的統計數據

離extjs 至 easyui 到html5到hightchars 再到hightmaps。Exjts和easyui很相似&#xff0c;extjs是重量級的&#xff0c;easyui輕量級的。比extjs容易上手。照著demo改就能夠開發了。easyui入門demo見&#xff1a;easyui-demo&#xff0c;或者到官網http://www.jeasyui.com/&…

python pytorch 版本,python 如何查看pytorch版本

看代碼吧~import torchprint(torch.__version__)補充&#xff1a;pytorch不同版本安裝以及版本查看一&#xff1a;基于conda安裝conda create --name pytorch_learn python3.6.7#創建一個名為pytorch_learn的環境source activate pytorch_learn #進入環境conda install pytorch…

Unity WebGL 窗口自適應

unity 打包好WebGL后&#xff0c;用文本編輯器編輯打包生成的 index.html 文件 在生成的html里面修改代碼<script type"text/javascript">    function Reset() {       var canvas document.getElementById("#canvas");        …

python 會增加內存嗎,Python+不斷增加的內存分配

我正在寫一個模塊來訓練一個大型數據集上的ML模型——它包括0.6米的數據點&#xff0c;每個數據點的維度都是0.15米。我在加載數據集本身時遇到了問題。(全是numpy數組)下面是一個代碼片段(它復制了實際代碼的主要行為)&#xff1a;import numpyimport psutilFV_length 150000…

非IT人士的云棲醬油之行 (程序猿迷妹的云棲之行)

摘要&#xff1a; 熟悉我的人都知道&#xff0c;我是一個貪玩兒且不學無術的姑娘&#xff0c;對于互聯網我也是知之甚少&#xff1b;這次去到杭州參加阿里巴巴集團主辦的為期4天的科技大會也是很例外&#xff1b;但是不得不說這次的會議真是讓我很震驚。今天我就和大家分享一下…

MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文檢索和類memcache的nosql支持

背景&#xff1a;搞個個人博客的全文搜索得用like啥的&#xff0c;現在mysql版本號已經大于5.6.4了也就支持了innodb的全文搜索了&#xff0c;剛查了下目前版本號都到MySQL Community Server 5.6.19 了&#xff0c;所以&#xff0c;一些小的應用可以用它做全文搜索了&#xff0…

搭建基于Jenkins的CI服務器

安裝Jenkins和創建任務這些操作網上一搜一大把&#xff0c;這里就沒必要寫了&#xff0c;直接就開始編譯、單元測試&#xff0c;覆蓋&#xff0c;git提交觸發構建&#xff0c;構建失敗發送給提交人郵件。 因為項目比較復雜&#xff0c;為了懶省事我直接在CI服務器上安裝了visua…

php打補丁,PHPMailer庫打補丁后漏洞仍然存在,怎么解?

開源PHPMailer庫被披露存有一個嚴重的遠程代碼執行漏洞。這個漏洞在被修補后&#xff0c;又進行了二次修復&#xff0c;因為第一次沒有充分解決問題。那么&#xff0c;這個漏洞是如何工作的&#xff1f;為什么原始補丁沒有解決問題&#xff1f;Michael Cobb&#xff1a;代碼庫和…

Ubuntu下安裝jdk經驗分享

Ubuntu下安裝jdk經驗分享http://www.jb51.net/article/55131.htm轉載于:https://www.cnblogs.com/kangtuohongwai/p/6002555.html

BZOJ 1270: [BeijingWc2008]雷濤的小貓( dp )

簡單的dp..dp(i,j) max(dp(x,y))cnt[i][j], (x,y)->(i,j)是合法路徑.設f(i) max(dp(x,y))(1≤x≤N, 1≤y≤i), g(i,j) max(dp(i, k))(1≤k≤j)那么dp(i,j) max(f(jdelta), g(i,j1))cnt[i][j]. 遞推即可. 時間復雜度O(NH)----------------------------------------------…

【校招面試 之 C/C++】第12題 C++ 重載、重寫和重定義

1、成員函數重載特征&#xff1a; a.相同的范圍&#xff08;在同一個類中&#xff09;&#xff1b; b.函數名字相同&#xff1b; c.參數不同&#xff08;參數個數不同或者參數類型不同&#xff0c;但是返回值不同不能使重載&#xff09;&#xff1b; d.virtual關鍵字可有可無…

mac php5.6.30與php7共存,認識Homebrew以及在Mac上同時安裝PHP5及PHP7

Homebrew幾乎是Mac上必備的軟件&#xff0c;用于下載安裝和管理其他軟件。尤其對于程序員&#xff0c;講真&#xff0c;本人到現在仍然不知道在Mac上如何不借助Homebrew來搭建php-apache-mysql開發環境。認識HomebrewHomebrew是一個開源項目&#xff0c;據說它的作者曾經去谷歌…

POJ 1141

題意&#xff1a;給出一個表達式的子序列&#xff0c;要你填充這個序列&#xff0c;保證最終形成的序列長度最短&#xff0c;也就是添加的括號最少 這個子序列要遵循括號匹配的原則。 分析&#xff1a;轉移方程dp[i][j]min(dp[i][k],dp[k1][j]).i<k<j.dp[1][1]1; dp[i][j…

PHP array_count_values() 函數用于統計數組中所有值出現的次數。

定義和用法 array_count_values() 函數用于統計數組中所有值出現的次數。 本函數返回一個數組&#xff0c;其元素的鍵名是原數組的值&#xff0c;鍵值是該值在原數組中出現的次數。 語法 array_count_values(array) 參數 描述 array 必需。規定輸入的數組。 例子 <?php …

SpringDay01

一&#xff1a;什么是Spring。 簡單的理解就是一個可以裝web層&#xff0c; service層&#xff0c; dao層&#xff0c;這三層對象的容器。 二&#xff1a;Spring搭建 1.導包&#xff1a;核心四個包和log4j兩個包 2.注冊對象&#xff1a;User類 3.書寫配置注冊對象到容器 a>導…

bom_clear.php,thinkphp清除BOM方法

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓在utf-8編碼文件中BOM在文件頭部&#xff0c;占用三個字節&#xff0c;用來標示該文件屬于utf-8編碼&#xff0c;現在已經有很多軟件識別bom頭&#xff0c;但是還有些不能識別bom頭&#xff0c;比如PHP就不能識別bom頭&#xff0c;…