51Nod1007 正整數分組(01揹包)
這道題思路就是算出陣列總和,在陣列中找到和最接近陣列總和一半的一些數。
可以用01揹包解決這道題,dp[i][j]表示在陣列前i項中最接近j的最大值。
狀態轉移方程為:dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i]]+a[i]);
#include<iostream> #include<algorithm> #include<cstring> using namespace std; int dp[105][10005]; int main() { int n,sum=0,i,j; cin>>n; int a[10005]; for(i=1;i<=n;i++) { cin>>a[i]; sum+=a[i]; } memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) for(j=sum/2;j>=a[i];j--) dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i]]+a[i]); cout<<sum-2*dp[n][sum/2]<<endl; return 0; }
相關推薦
51Nod1007 正整數分組(01揹包)
這道題思路就是算出陣列總和,在陣列中找到和最接近陣列總和一半的一些數。 可以用01揹包解決這道題,dp[i][j]表示在陣列前i項中最接近j的最大值。 狀態轉移方程為:dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i]]+a[i]); #include<
51nod-1007正整數分組(簡單dp)
傳送門 1007 正整數分組 基準時間限制:1 秒 空間限制:131072 KB 分值: 10 難度:2級演算法題 收藏 關注 將一堆正整數分為2組,要求2組的和相差最小。 例如:1 2 3 4 5,將1 2 4分為1組,3 5分為1組,兩組和相差1,是所有方
採藥-動態規劃(01揹包)
採用一維陣列進行優化 #include<cstdio> #include<algorithm> using namespace std; int w[105], v[105]; int dp[1005]; int main() { int m, n; sca
B - Bone Collector (01揹包)
題目: 塗奧最近迷上了吃雞,房間有n個配件,每個配件有c(c<=1e3)的重量和v(v<=1e3)的價值,哇,塗奧撿了一個2級包,容量為s,所以塗奧最多當多肥的快遞員呢? Input 輸入的第一行是T, 表示有一共要打T場比賽. 每組資料由三行組成. 第1行包含兩個整數
和為K的組合(01揹包)
給出N個正整陣列成的陣列A,求能否從中選出若干個,使他們的和為K。如果可以,輸出:“Yes”,否則輸出"No"。 Input 第1行:2個數N, K, N為陣列的長度, K為需要判斷的和(2 <= N <= 20,1 <= K <= 10^9) 第2 - N + 1行
HDU 2602 Bone Collector(01揹包)
Bone Collector Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , s
NYOJ 289 - 蘋果(01揹包)
題目連結 http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=289 【題目描述】 ctest有n個蘋果,要將它放入容量為v的揹包。給出第i個蘋果的大小和價錢,求出能放入揹包的蘋果的總價錢最大值。 輸入 有多組測試資料,每組測試資料
nyoj 325 - zb的生日(01揹包)
題目連結 http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=325 【題目描述】 今天是陰曆七月初五,acm隊員zb的生日。zb正在和C小加、never在武漢集訓。他想給這兩位兄弟買點什麼慶祝生日,經過調查,zb發現C小加和never
HDU 2602 - Bone Collector(01揹包)
題目連結 http://acm.hdu.edu.cn/showproblem.php?pid=2602 【思路】 01揹包問題 #include<bits/stdc++.h> using namespace std; const int maxn=1005; int
2018.11.07【NOIP訓練】lzy的遊戲(01揹包)
傳送門 解析: 一個月前口胡了一下這道題,然後現在才在OJ上找到。。。 其實最困擾的是後效性的處理,我第一次口胡的時候總是覺得這個後效性環形怎麼處理都不太對,要麼不對要麼複雜度會爆炸,但是其實我們只需要知道一件事情,就是我們選擇的卡牌不超過總的張數,我們就總有辦法構造出
洛谷1048 採藥(01揹包)
傳送門 【題目分析】 這個兩維降一維妙妙妙啊。。。。。。 好吧我已經菜的做01揹包了。。。。 【程式碼~】 #include<bits/stdc++.h> using namespace std; const int MAXN=110; int n,m; int w
ZOJ 3956——Course Selection System(01揹包)
題目連結: 因為c的值很小,所以以c看做重量,把h當做價值 01揹包,取儘可能大的h 因為當c固定時,這個式子只需要看前面 h*h-h*c=h*(h-c) h大於c時,肯定h越大越好 h小於c時,表示式的值必定小於零,肯定是不考慮的 #include <cstdio&g
飯卡 (01揹包)
電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)。所以大家都希望儘量使卡上的餘額最少。 某天,食堂中有n種菜出售,每種菜可購買一次。已知每種菜的價格以
HDU 1864 (01揹包)
題目是中文,就不解釋了 。 最近準備系統的刷DP了,從揹包開始。 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> u
hdu——1171(01揹包)
題目連結: 【分析】 把題目轉化為01揹包 兩個相近的的話 就是接近於總長的1/2 #include<cstdio> #include<iostream> #include<algorithm> #include<cstri
2546 飯卡(01揹包)
演算法:01揹包DP 難度:NOIP--- 先把最貴的一種菜找到不用,用剩餘金額減5的金錢去儘可能買 除掉最貴的菜後剩餘的菜類, 最後再用餘下的錢去買最貴的菜 注意:要特判m<5的
HDU 2602 動態規劃+二維陣列、一維陣列兩解法(01揹包)
這道題就是簡單用二維陣列解決的時候,就是簡單的動態規劃,但是坑就坑在可能出現體積為0但是價值不為0的例子 一:二維陣列 下面是錯誤的程式碼 #include <iostream> #include <cstring> #include <
ZOJ——Course Selection System(01揹包)
題目連結: 因為c的值很小,所以以c看做重量,把h當做價值 01揹包,取儘可能大的h 因為當c固定時,這個式子只需要看前面 h*h-h*c=h*(h-c) h大於c時,肯定h越大越好 h小於c時,表示式的值必定小於零,肯定是不考慮的 #include <cs
POJ 3624 Charm Bracelet(01 揹包)
題目傳送門 Description Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to fill it with the best
2018.11.07 NOIP訓練 lzy的遊戲(01揹包)
傳送門 考慮對於每次最後全部選完之後剩下的牌的集合都對應著一種構造方法。 一個更接地氣的說法: 設消耗的牌數為ttt,如果使用的牌的lll值之和也為ttt,則對應著一種構造方式讓這種情形成立。 於是做0