description
乙個學校舉行拔河比賽,所有的人被分成了兩組,每個人必須(且只能夠)在其中的一組,且兩個組內的所有人體重加起來盡可能地接近.
input
第\(1\)行是乙個\(n\),表示參加拔河比賽的總人數,\(n<=100\),接下來的n行表示第\(1\)到第\(n\)個人的體重,每個人的體重都是整數\((1<=weight<=450)\)。
output
包含兩個整數:分別是兩個組的所有人的體重和,用乙個空格隔開。注意如果這兩個數不相等,則請把小的放在前面輸出。
sample input 1
3
100 90 200
sample output 1190 200
hint
\(n<=100,1<=weight<=450\)
\(0-1\)揹包
轉換成成乙個花費\(=\)價值的\(0-1\)揹包問題,記\(f[i][j]\)為用前\(i\)個物品,總代價\(<=j\)能取得的最大價值,可得狀態轉移方程:
\[f[i][j]=max(f[i][j],f[i][j]-w[i]]+w[i])
\]最後答案即為\(f[n][sum/2]\),其中\(sum=\sum_^nw[i]\).
實際**中,還可以使用滾動陣列來優化空間.
#includeusing namespace std;
#define maxn 105
#define maxw 45005
int w[maxn],n;
int f[maxw];
int tx=0;
int main()
for(int i=1;i<=n;i++)
for(int p=tx;p;p--)
if(p-w[i]>=0)
f[p]=max(f[p],f[p-w[i]]+w[i]);
cout乙個學校舉行拔河比賽,所有的人被分成了兩組,每個人必須(且只能夠)在其中的一組,兩個隊伍的人數之差不能超過1,且兩個組內的所有人體重加起來盡可能地接近.
input
第\(1\)行是乙個\(n\),表示參加拔河比賽的總人數,\(n<=100\),接下來的n行表示第\(1\)到第\(n\)個人的體重,每個人的體重都是整數\((1<=weight<=450)\)。
output
包含兩個整數:分別是兩個組的所有人的體重和,用乙個空格隔開。注意如果這兩個數不相等,則請把小的放在前面輸出。
sample input 13
100 90 200
sample output 1190 200
hint
\(n<=100,1<=weight<=450\)
\(0-1\)揹包
同樣轉換成成乙個花費\(=\)價值的\(0-1\)揹包問題,記\(f[i][j][k]\)為在前\(i\)個物品中選擇\(k\)個,總代價\(<=j\)能取得的最大價值.可得狀態轉移方程:
\[f[i][j][k]=max(f[i][j][k],f[i-1][j-1][k-w[i]]+w[i])
\]最終答案即為\(f[n][n/2][sum]\),其中\(sum=\sum_^nw[i]\).
同樣可以採用滾動陣列優化,還要注意初始化邊界.
#includeusing namespace std;
#define inf 0x3f
#define maxn 105
#define maxw 45005
int w[maxn],n;
int f[maxn][maxw];
int tx=0;
int main()
memset(f,-inf,sizeof(f));
for(int i=0;i<=tx>>1;i++)
f[0][i]=0;
for(int i=1;i<=n;i++)
for(int j=i;j>=1;j--)
for(int p=tx>>1;p>=w[i];p--)
f[j][p]=max(f[j][p],f[j-1][p-w[i]]+w[i]);
int ans=f[n>>1][tx>>1];
if(n%2)
ans=max(ans,f[(n>>1)+1][tx>>1]);
cout《還要注意,本題中第三重迴圈必須從\(sum/2\)開始,即**中的
for(int p=tx>>1;p>=w[i];p--)
否則會超時. kali攻擊139埠 簡易入侵139埠
提到139埠,我想知道的人一定非常多,本來是不想用寫這個教程的,但考慮要照顧到新人,所以還是簡單的寫一下。首先,連線的命令是 netuse ip位址 ipc content lt 空格 密碼 user 使用者名稱 net use 192.168.1.11 ipc content nbsp 12345...
139 單詞拆分
給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典中出現的單詞。說明 示例 1 輸入 s leetcode worddict leet code 輸出 true解釋 返回 true 因為 leetcode 可以被拆分成 leet co...
139 單詞拆分
給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典 現的單詞。說明 示例 1 輸入 s leetcode worddict leet code 輸出 true 解釋 返回 true 因為 leetcode 可以被拆分成 leet co...