【NOIp 2015】【DFS】斗地主

題面

自己網上去搜吧…

代碼

#include <cstdio>
#include <cstring>
#include <algorithm>
#define INF 10000000
#define maxn 40
using namespace std;int t,n,temp,a,zhang[maxn],ans=INF;void dfs(int,int,int,int);
void shunzi(int,int,int,int,int);void chu(int x,int dep,int left){//在第dep手牌的時候出x號牌,還剩left張牌 if(x>14) return;if(dep>ans) return;//如果比當前最優解差就跳出 if(left==0){ ans=min(ans,dep); return; }//如果剩下的手牌為0,記錄答案 if(zhang[x]==0) chu(x+1,dep,left);//如果x號牌出完了就該出x+1號牌 else for(int i=zhang[x];i>0;i--) dfs(x,i,dep,left);//搜索第x號牌出1~出完的情況 return;
}void dfs(int p,int shu,int dep,int left){//第p張牌出shu張,出了dep手牌,剩下left張牌 if(shu==4){zhang[p]-=4;chu(p,dep+1,left-4);//出炸彈//出四帶二(四帶一對,四帶兩對,四帶兩張) for(int i=p+1;i<=14;i++){if(zhang[i]>=1){zhang[i]--;for(int j=p+1;j<=14;j++){if(zhang[j]>=1){zhang[j]--;chu(p,dep+1,left-6);zhang[j]++;}}zhang[i]++;}}//四帶兩張或一對 for(int i=p+1;i<=14;i++){for(int j=i+1;j<=14;j++){if(zhang[i]>=2&&zhang[j]>=2){zhang[i]-=2; zhang[j]-=2;chu(p,dep+1,left-8);zhang[i]+=2; zhang[j]+=2;}}}//四帶兩對zhang[p]+=4;return;}else if(shu==3){zhang[p]-=3;//出三順子if(p>2){for(int i=p+1;i<=14;i++){if(zhang[i]<3) break;else shunzi(p,i,3,dep,left);}}//出三帶二for(int i=p+1;i<=14;i++){if(zhang[i]>=2){zhang[i]-=2;chu(p,dep+1,left-5);zhang[i]+=2;}} //出三帶一for(int i=p+1;i<=14;i++){if(zhang[i]>=1){zhang[i]-=1;chu(p,dep+1,left-4);zhang[i]+=1;}}chu(p,dep+1,left-3);zhang[p]+=3; return;}else if(shu==2){zhang[p]-=2;//出雙順子if(p>2&&zhang[p+1]>=2&&zhang[p+2]>=2) for(int i=p+2;i<=14;i++){if(zhang[i]<2){break;}else shunzi(p,i,2,dep,left);}//出四帶兩對for(int i=p+1;i<=14;i++){if(zhang[i]>=4){zhang[i]-=4;chu(p,dep+1,left-6); //四帶一對 for(int j=p+1;j<=14;j++){if(zhang[j]>=2){zhang[j]-=2;chu(p,p+1,left-8);zhang[j]+=2;}}zhang[i]+=4;}}//出三帶二for(int i=p+1;i<=14;i++){if(zhang[i]>=3){zhang[i]-=3;chu(p,dep+1,left-5);zhang[i]+=3;}}//出單對chu(p,dep+1,left-2);zhang[p]+=2; return;}else if(shu==1){zhang[p]-=1;//出順子if(p>2&&p<11&&zhang[p+1]>=1&&zhang[p+2]>=1&&zhang[p+3]>=1&&zhang[p+4]>=1){//因為大小王不能進順子所以p<11 for(int i=p+4;i<=14;i++){if(zhang[i]<1){break;}else shunzi(p,i,1,dep,left);}}//出四帶兩張單牌for(int i=p+1;i<=14;i++){if(zhang[i]>=4){zhang[i]-=4;for(int j=p+1;j<=14;j++){if(zhang[j]>=1){zhang[j]-=1;chu(p,dep+1,left-6);zhang[j]+=1;}}zhang[i]+=4;}}//出三帶一for(int i=p+1;i<=14;i++){if(zhang[i]>=3){zhang[i]-=3;chu(p,dep+1,left-4);zhang[i]+=3;}} //出單張chu(p,dep+1,left-1);zhang[p]+=1;return;}return;
}void shunzi(int x,int y,int type,int dep,int left){//從第x到y張牌開始出順子,出type種順子 for(int i=x+1;i<=y;i++) zhang[i]-=type;chu(x,dep+1,left-type*(y-x+1));for(int i=x+1;i<=y;i++) zhang[i]+=type;return;
}int main(){freopen("landlords.in","r",stdin);freopen("landlords.out","w",stdout);scanf("%d%d",&t,&n);while(t--){memset(zhang,0,sizeof(zhang));ans=INF;for(int i=1;i<=n;i++) {scanf("%d%d",&a,&temp);if(a==1) zhang[14]++;else zhang[a]++;}chu(0,0,n);printf("%d\n",ans);}return 0;
}//hcy太強辣~\(≧▽≦)/~啦啦啦 

轉載于:https://www.cnblogs.com/leotan0321/p/6081376.html

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

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

相關文章

[轉]從入門到精通,Java學習路線導航

引言 最近也有很多人來向我"請教"&#xff0c;他們大都是一些剛入門的新手&#xff0c;還不了解這個行業&#xff0c;也不知道從何學起&#xff0c;開始的時候非常迷茫&#xff0c;實在是每天回復很多人也很麻煩&#xff0c;所以在這里統一作個回復吧。 Java學習路線…

如何讓 Dapper 支持 DateOnly 類型

前言在上次的文章中&#xff0c;我們讓 EF Core 6 支持了 DateOnly 類型。那么&#xff0c;Dapper 是否支持 DateOnly 類型呢&#xff1f;public class User {public int Id { get; set; }public string Name { get; set; }public DateOnly Birthday { get; set; } }using (var…

HP proliant服務器從usb啟動

1&#xff0c;開機出現自檢畫面開始按F9進入設置&#xff0c;進入BIOS 選擇standard boot order&#xff08;rpl&#xff09;&#xff0c;把usb driver放在第一位&#xff0c;保存好 2&#xff0c;按F1開始啟動。 &#xff08;注&#xff1a;我使用ubuntu14.04&#xff0c;到啟…

VB常用內部函數大全一覽表(建議收藏)

VB提供了大量的內部函數供用戶在編程時調用。內部函數按其功能分為數學運算函數、字符串函數、轉換函數、日期與時間函數、判斷函數和格式輸出函數等。 文章目錄 算術函數字符串函數日期和時間函數數據類型轉換函數算術函數 字符串函數 日期和時間函數

數據庫分類介紹

在當今的互聯網中&#xff0c;最常見的數據庫模型主要是兩種&#xff0c;即“關系型數據庫”和“非關系型數據庫”。 一、關系型數據庫 1、關系型數據庫的由來 雖然網狀數據庫和層次數據庫已經很好的解決了數據的集中和共享問題&#xff0c;但是在數據庫獨立性和抽象級別上扔有…

BZOJ 1717 [Usaco2006 Dec]Milk Patterns 產奶的模式(后綴數組)

【題目鏈接】http://www.lydsy.com/JudgeOnline/problem.php?id1717 【題目大意】 求一個最長的串&#xff0c;使得其在母串中出現的次數達到要求 【題解】 二分答案&#xff0c;利用后綴數組求出的height數組進行檢驗 【代碼】 #include <cstdio> #include <cstring…

記一次 .NET 某物管后臺服務 卡死分析

一&#xff1a;背景 1. 講故事這幾個月經常被朋友問&#xff0c;為什么不更新這個系列了&#xff0c;哈哈&#xff0c;確實停了好久&#xff0c;主要還是打基礎去了&#xff0c;分析 dump 的能力不在于會靈活使用 windbg&#xff0c;而是對底層知識有一個深厚的理解&#xff0c…

【C#程序設計】教學講義——第三章:C#語言基礎

完整C#教學課件系列: 【C#程序設計】教學講義——第一章:C#語言概述 【C#程序設計】教學講義——第二章:簡單C#程序設計 【C#程序設計】教學講義——第三章:C#語言基礎 文章目錄 3.1 C#程序結構3.2 變量和常量3.3 常用數據類型3.4 運算符和表達式3.1 C#程序結構 3.1.1 組成…

直接在script里面換樣式IE6,7,8不兼容

1 <!DOCTYPE HTML>2 <html>3 <head>4 <meta http-equiv"Content-Type" content"text/html; charsetutf-8">5 <title>無標題文檔</title>6 </head>7 8 <body>9 10 <input id"inp1" type&quo…

C語言試題111之 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一個數字。例如 2+22+222+2222+22222(此時 共有 5 個數相加),幾個數相加有鍵盤控制。

?作者簡介:大家好我是碼莎拉蒂,CSDN博客專家?????? ??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 1、題目 題目: s=a+aa+aaa+aaaa+aa…a 的值,其中 a 是一個數字。例如 2+22+222+2222+22222(此時 共…

Redis常用配置參數詳解及查看修改命令

目錄 Redis常用配置參數 Redis配置參數查看命令 語法 舉例 說明&#xff1a; Redis配置參數修改命令 語法 舉例 說明&#xff1a; Redis常用配置參數 序號配置項說明1daemonize noRedis 默認不是以守護進程的方式運行&#xff0c;可以通過該配置項修改&#xff0c;使…

反射封裝工具類-----零SQL插入

V_1.0 需求&#xff1a;開發一個工具方法&#xff0c;輔助初級程序員在不需要掌握sql命令和JDBC的情況下&#xff0c;實現對數據庫的插入操作。 V_4.0 實現0sql插入操作需要解決的問題. 1. 如何確認當前【陌生對象】關聯的【表名】 2. 如何確認當前表中需要添加數據的字段 3. …

MathType插入帶序號公式的兩種方法

方法一&#xff1a; 由于我之前使用表格15% 70% 15%來布局的&#xff0c;所以最開始相的就是如何錄入公示后插入公式序號&#xff0c;如下圖所示 先設置序號格式 錄好公式后點“Insert Number”就好了&#xff0c;這樣的話需要緊挨著公式&#xff0c;用空格把他空到最右側就好了…

數據結構算法:基于C#語言用圖實現最短路徑,太妙了!

文章目錄 構造類并實現最短路徑方法設計界面編寫程序測試新的Graph類構造類并實現最短路徑方法 在前面的C#編程中,我們已經完成了諸如遍歷、最小生成樹等許多方法,這個類已經可以完成諸如鄰接矩陣輸入、頂點矩陣輸入問題。這個類在Graph2.cs中。 現在,我們新建立一個WINDOW…

【系統設計】鄰近服務

在本文中&#xff0c;我們將設計一個鄰近服務&#xff0c;用來發現用戶附近的地方&#xff0c;比如餐館&#xff0c;酒店&#xff0c;商場等。設計要求 從一個小明去面試的故事開始。面試官&#xff1a;你好&#xff0c;我想考察一下你的設計能力&#xff0c;如果讓你設計一個…

[轉]Redis持久化存儲(AOF與RDB兩種模式)

Redis中數據存儲模式有2種&#xff1a;cache-only,persistence; cache-only即只做為“緩存”服務&#xff0c;不持久數據&#xff0c;數據在服務終止后將消失&#xff0c;此模式下也將不存在“數據恢復”的手段&#xff0c;是一種安全性低/效率高/容易擴展的方式&#xff1b;pe…

C語言試題112之一個數如果恰好等于它的因子之和,這個數就稱為“完數”。例如 6=1+2+3.編程 找出 1000 以內的所有完數。

?作者簡介:大家好我是碼莎拉蒂,CSDN博客專家?????? ??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 1、題目 題目:一個數如果恰好等于它的因子之和,這個數就稱為“完數”。例如 6=1+2+3.編程 找出 …

關于jstl.jar引用問題及解決方法

在前文SSM說到因為從MyEclipse換成了Eclipse。有些架包自動缺失。 造成&#xff1a;"org.apache.jasper.JasperException: This absolute uri (http://java.sun.com/jsp/jstl/core ) cannot be resolved in either web.xml or the jar files deployed with this applicati…

網絡技術基礎與計算思維實驗教程_2.3_單交換機VLAN配置實驗

2.3.1 實驗內容 2.3.2實驗目的 實驗的目的一是驗證交換機 VLAN 配置過程; 二是驗證屬于同一 VLAN的終端之間的通信過程; 三是驗證每一個 VLAN 為獨立的廣播域; 四是驗證屬于不同 VLAN的兩個終端之間不能通信; 五是驗證轉發項和 VLAN的對應關系。 2.3.3實驗原理 默認情況下,交換…

【數據庫原理及應用】經典題庫附答案(14章全)——第一章:數據庫基礎知識

【數據庫原理及應用】經典題庫附答案&#xff08;14章全&#xff09;——第一章&#xff1a;數據庫基礎知識 【數據庫原理及應用】經典題庫附答案&#xff08;14章全&#xff09;——第二章&#xff1a;關系數據庫知識 【數據庫原理及應用】經典題庫附答案&#xff08;14章全&a…