題目描述
pipi有一台膝上型電腦,一台台式電腦電腦,兩台電腦的效能相同,現在小明手裡有n個等待執行的程式,每個程式執行所需的時間分別為n1,n2,n3,n4……,一台電腦同一時刻只能執行乙個程式,乙個程式只需要執行一次。兩台電腦同時開始執行,請問小明該如何分配程式在這兩台電腦上執行,使得最後結束執行的電腦的執行時間最短。
輸入
輸入不超過30組資料,每組資料第一行為n,代表有n個等待執行的程式,第二行為n個數字,代表每個程式的執行時間,1 <= n <= 1000 ,每個程式的執行時間均為正整數, 所有程式的執行時間之和不超過5000。
輸出
輸出最後結束執行的電腦的執行時間。
樣例輸入2
1 12
1 23
1 2 3
樣例輸出1
23貪心不行,是01揹包問題
即只有一台電腦時依次執行需要執行的時間的一半,最多可以執行多長
總數減去一半最多耗時,即答案,另一台電腦需要的最長時間
01揹包問題
#include
#include
#include
#include
using namespace std;
int n;
int arr[
1005];
int sum,mid;
int dp[
1005][
2510];
intmain()
dp[0]
[0]=
0;mid=sum/2;
for(i=
1;i<=mid;i++
)dp[0]
[i]=0;
for(i=
1;i<=n;i++
)for
(j=1
;j<=mid;j++)if
(j) dp[i]
[j]=dp[i-1]
[j];
else dp[i]
[j]=
max(dp[i-1]
[j],dp[i-1]
[j-arr[i]
]+arr[i]);
printf
("%d\n"
,sum-dp[n]
[mid]);
}//while
return0;
}
#include
#include
#include
#include
using namespace std;
int a[
1005
],dp[
5005];
intmain()
}}
1076: 飯卡
題目描述
csu本部食堂的飯卡有一種很詭異的設計——在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)。所以大家都希望盡量使卡上的餘額最少。
某天,食堂中有n種菜**,每種菜可購買一次。已知每種菜的**以及卡上的餘額,問最少可使卡上的餘額為多少。
輸入
多組資料。對於每組資料:
第一行為正整數n,表示菜的數量。n<=1000。
第二行包括n個正整數,表示每種菜的**。**不超過50。
第三行包括乙個正整數m,表示卡上的餘額。m<=1000。
輸出
對於每組輸入,輸出一行,包含乙個整數,表示卡上可能的最小餘額。
樣例輸入1
505101 2 3 2 1 1 2 3 2 1
50樣例輸出
-4532把最貴的菜留五塊錢最後買即可使餘額最少
即轉化為money-5的從1到n-1中選擇的01揹包問題
要注意的是,如果money<5,則直接輸出money(因為什麼也買不了ovo)
#include
#include
#include
#include
#include
using namespace std;
intcmp
(const
void
*a,const
void
*b)int n;
int cost[
1005];
int dp[
1005][
1005];
int money;
intmain()
qsort
(cost+
1,n,
sizeof
(int
),cmp)
; money-=5
;for
(i=0
;i) dp[i][0
]=0;
for(i=
1;i<=money;i++
)dp[0]
[i]=0;
for(i=
1;i)for
(j=1
;j<=money;j++)if
(j) dp[i]
[j]=dp[i-1]
[j];
else dp[i]
[j]=
max(dp[i-1]
[j],dp[i-1]
[j-cost[i]
]+cost[i]);
printf
("%d\n"
,money+
5-dp[n-1]
[money]
-cost[n]);
}return0;
}
1079
#include
#include
int n,m,val[
500]
,wei[
500]
;int dp[
10005];
intmain()
return0;
}
動態規劃揹包問題 01揹包
問題描述 n種物品,每種乙個。第i種物品的體積為vi,重量為wi。選一些物品裝到容量為c的揹包,使得揹包內物品不超過c的前提下,重量最大。問題分析 宣告乙個f n c 的陣列。f i j 表示把前i件物品都裝到容量為j的揹包所獲得的最大重量。當 j v i 時,揹包容量不足以放下第 i 件物品,f ...
動態規劃 揹包問題 01揹包
有n種物品和乙個容量為v的揹包,每種物品僅用一次。第i件物品的費用是w i 價值是v i 求解將哪些物品裝入揹包可使價值總和最大。例如 n 5,v 10 重量 價值 第乙個物品 10 5 第二個物品 1 4 第三個物品 2 3 第四個物品 3 2 第五個物品 4 1 首先我們考慮貪心策略,選取最大價...
0 1揹包問題(動態規劃)
一 問題描述 有n件物品和乙個容量為v的揹包。第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。所謂01揹包,表示每乙個物品只有乙個,要麼裝入,要麼不裝入。二 解決方案 考慮使用動態規劃求解,定義乙個遞迴式 opt i v 表示前i個物品,在揹包容量大小為v的情況下,最...