DP 搜尋 分陣列為兩個部分 最小差

2021-06-22 00:17:12 字數 1049 閱讀 6998

拔河比賽(出自rqnoj)

題目描述

superwyh的學校要舉行拔河比賽,為了在賽前鍛鍊大家,老師決定把班裡所有人分為兩撥,進行拔河因為為鍛鍊所以為了避免其中一方的實力過強老師決定以體重來劃分隊伍,盡量保持兩個隊伍的體重差最少,因為老師對結果沒興趣,所以只告訴老師最小的體重差是多少就行了。這個受苦受累的任務就交給superwyh了,因為這兩天superwyh的後背間諜sjh鬧肚子了,所以只好superwyh親自去調查每個人的體重,但是僅僅知道體重依然難以確定到底如何分配隊伍,請各位oier幫助superwyh出出主意。

輸入格式

第一行為人數(1<=n<=100),從第二行開始是每個人的體重(0<=m<=100)。

輸出格式

最小體重差。

樣例輸入410

2341

12樣例輸出

4演算法1:搜尋:

#include #include #include using namespace std;

int a[24];

int m=int_max;

int k=0;

int n;

void f(int j,int sum)else if(j>n)

f(0,0);

cout<

演算法2:動態規劃:

dp[i][j]表示取前i個,且總量可達j的是否

01揹包問題

#include #include #include using namespace std;

#define max_n 1000

int a[max_n];

bool dp[max_n][max_n];

int main()

m=sum;

sum/=2;

memset(dp,false,sizeof(dp));

for(int i=0;i<=n;i++)

dp[i][0]=true;

for(int i=1;i<=n;i++)else}}

int t=0;

for(int i=0;i<=sum;i++)

}cout<

32 求兩個序列的和的最小差值

題目 有兩個序列a,b,大小都為n,序列元素的值任意整數,無序 要求 通過交換a,b中的元素,使 序列a元素的和 與 序列b元素的和 之間的差最小。例如 var a 100,99,98,1,2,3 var b 1,2,3,4,5,40 解法一 假設序列a,b中元素的和為sum a和sum b。假設a...

找到陣列中兩個最小的元素

1 基本思路 設定兩個min1 min2變數,分別儲存第乙個最小的資料,第二個的資料。先將其初始化為乙個相當大的值,然後依次與陣列中的每乙個元素比較,只有當比min1大的時候才會去比較min2,如此比較下來便可以得到陣列中兩個最小的元素。如果初始化的時候只是設定為第乙個元素的值,在特殊情況下,第乙個...

兩個已排序陣列,找出相同的部分

存在的兩個陣列,已經排好順序,求其相同的部分,有以下幾種求法 1 窮舉法 最原始的方法,時間複雜度為o m n 如下 int a new int 示列陣列 int b new int for int i 0 i a.length i 2 binary search 通過乙個陣列的for迴圈,不斷與另...