CODE【VS】2144 砝碼稱重2(dfs+剪枝)
有n個砝碼,現在要稱一個質量為m的物體,請問最少需要挑出幾個砝碼來稱?
注意一個砝碼最多隻能挑一次
輸入描述 Input Description第一行兩個整數n和m,接下來n行每行一個整數表示每個砝碼的重量。
輸出描述 Output Description輸出選擇的砝碼的總數k,你的程式必須使得k儘量的小。
樣例輸入 Sample Input3 10
5
9
1
2
資料範圍及提示 Data Size & Hint1<=n<=30,1<=m<=2^31,1<=每個砝碼的質量<=2^30
#include<cstdio> #include<algorithm> using namespace std; int n,m,a[31],ans; long long hou[32]; bool cmp(int a,int b){return a>b;} void dfs(int flag, int tot, int sum) { if (tot>=ans) return; if (sum==m){ans=tot; return;} for (int i=flag; i<=n; i++) if (sum+a[i]<=m) if (sum+hou[i]<m) return; else dfs(i+1,tot+1,sum+a[i]); } int main() { scanf("%d%d",&n,&m); for (int i=1; i<=n; i++) scanf("%d",&a[i]); sort(a+1,a+n+1,cmp); for (int i=n; i>=1; i--) hou[i]=hou[i+1]+a[i]; ans=n; dfs(1,0,0); printf("%d\n",ans); return 0; }
相關推薦
CODE【VS】2144 砝碼稱重2(dfs+剪枝)
題目描述 Description 有n個砝碼,現在要稱一個質量為m的物體,請問最少需要挑出幾個砝碼來稱? 注意一個砝碼最多隻能挑一次 輸入描述 Input Description 第
2144 砝碼稱重 2 用map離散化hasi+二分搜尋
2144 砝碼稱重 2 時間限制: 1 s 空間限制: 16000 KB 題目等級 : 鑽石 Diamond 題解 題目描述 Descrip
CODEVS 2144 砝碼稱重2
//二分dfs,最後合併 #include<bits/stdc++.h> using namespace std; const int maxn = 400000; int n, m,
wikioi 2144 砝碼稱重 2 STL_map
看似dp,但是資料太大,不過n很小,可以暴力解決。 由於30個數組合情況太多,所以可以分成兩邊,首先預處理前n/2個數能組成哪些數,並且最小消耗多少砝碼,map儲存下來。 然後處理右邊能組合成什麼數,相加就夠了。 注意這樣會漏掉兩種情況,就是光一邊就能組成最終答案的(因為m
CODE【VS】1384 黑色星期五(計算某一天是星期幾的公式)
題目描述 Description 13號又是星期五是一個不尋常的日子嗎? 13號在星期五比在其他日少嗎?為了回答這個問題,寫一個程式來計算在n年裡13 日落在星期一,星期二......星期日的次數.這個測試從1900年1月1日到 1900+n-1年12月31日.n是
wikioi-天梯-提高一等-雜湊表-2144:砝碼稱重2
題目描述 Description 有n個砝碼,現在要稱一個質量為m的物體,請問最少需要挑出幾個砝碼來稱? 注意一個砝碼最多隻能挑一次 輸入描述 Input Description 第一行兩個整數n和m,接下來n行每行一個整數表示每個砝碼的重量。
Wikioi 2144 砝碼稱重
用到的技巧就是將它分成前n/2個和後n/2個砝碼 先計算出前n/2個砝碼可以稱出的重量和所用砝碼數量(暴力計算) 存在map中 處理後n/2個砝碼的時候就直接判斷m-當前重量是否可行並更新ans即可 #include<cstdio> #include<ma
【javaweb】請求轉發和重定向(面試經常問)
重定向 //之前的寫法 response.setStatus(302); response.setHeader(“Location”, “login_success.html”); //重定向寫法: 重新定位方向 引數即跳轉的位置 response.sendRe
Codevs_P2144 砝碼稱重 2
時間限制: 1 s 空間限制: 16000 KB 題目等級 : 鑽石 Diamond 題目描述 Description 有n個砝碼,現在要稱一個質量為m的物體,請問最少需要挑出幾個砝碼來稱? 注意一個砝碼最多隻能挑一次 輸入描述 Input De
砝碼稱重2
題目描述 Description 有n個砝碼,現在要稱一個質量為m的物體,請問最少需要挑出幾個砝碼來稱? 注意一個砝碼最多隻能挑一次 輸入描述 Input Description 第一行兩個整數
NOI題庫--砝碼稱重V2(多重揹包2^n拆分)
以前只會寫多重揹包的原版,渣的不行,為了做此題不得不學習了一下,發現其實也不難,只要理解了方法就好多了(PS:其實和倍增挺像的) 8756:砝碼稱重V2 總時間限制: 1000ms 記憶體限制:
【Python】正則表達式1(未完)
pes mmu get regular rop 則表達式 line out github 1、正則表達式唯一的用途就是在文本中匹配和尋找模式,模式可以簡單,也可以復雜。 2、Regexr 這個網站很個性的就是,有一個community標簽,打開後可以看到評分由高到低
洛谷P3374 【模板】樹狀數組 1(CDQ分治)
size 結果 pri amp fine open sum turn 二維 題目描述 如題,已知一個數列,你需要進行下面兩種操作: 1.將某一個數加上x 2.求出某區間每一個數的和 輸入輸出格式 輸入格式: 第一行包含兩個整數N、M,分別表示該數列數字的個
【模板】可持久化線段樹 1(主席樹)
base math 一次 數據 mar 指定 das min 第k小 題目背景 這是個非常經典的主席樹入門題——靜態區間第K小 數據已經過加強,請使用主席樹。同時請註意常數優化 題目描述 如題,給定N個正整數構成的序列,將對於指定的閉區間
【UVa】Biggest Number(dfs+剪枝)
scanf sin ret break puts 從大到小 如果 ssl ges 題目 題目 ? ? 分析 典型搜索,考慮剪枝。 統計一下聯通分量。 1、本位置能夠達到所有的點的數量加上本已有的點,還沒有之前的結果長,直接返回。 2、當本位置能夠達到所有的點的數量加上本
【MongoDB】NoSQL Manager for MongoDB 教程(基礎篇)
好的 log 很難 gpo ssi next 破解 情況 eight 前段時間,學習了一下mongodb,在客戶端工具方面,個人認為 NoSQL Manager for MongoDB 是體驗比較好的一個,功能也較齊全。可惜在找教程的時候,發現很難找到比較詳細的
【BZOJ】1260 [CQOI2007]塗色paint(區間dp)
c++ ide hid event pri display pro == spl 題目 傳送門:QWQ 分析 區間dp, 詳見代碼 代碼 /*****************************************
【刷題】洛谷 P3834 【模板】可持久化線段樹 1(主席樹)
!= tchar 這樣的 信息 reg har mem hair define 題目背景 這是個非常經典的主席樹入門題——靜態區間第K小 數據已經過加強,請使用主席樹。同時請註意常數優化 題目描述 如題,給定N個正整數構成的序列,將對於指定的閉區間查詢其區間內的第K小值。
【題解】 bzoj1207: [HNOI2004]打鼴鼠 (動態規劃)
def math clas amp online code 直接 tro ID bzoj1207,懶得復制,戳我戳我 Solution: 挺傻逼的一個\(dp\),直接推就好了 這題在bzoj上的數據有點問題,題目保證每個時間點不會出現在同一位置兩個地鼠,然而他有= =(
P3834 【模板】可持久化線段樹 1(主席樹)
lose printf TE article 發現 AC 但是 || amp 題目背景 這是個非常經典的主席樹入門題——靜態區間第K小 數據已經過加強,請使用主席樹。同時請註意常數優化 題目描述 如題,給定N個正整數構成的序列,將對於