日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JZOJ__Day 6:【普及模拟】团队背包(team)

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ__Day 6:【普及模拟】团队背包(team) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

DaA 和他的朋友組成一個團隊去旅行了。他們每個人都準備了一個背包,用來裝旅行用的物品。他們的背包有兩個特點:
1. 每個人的背包能裝無限多的物品,每種物品有一個價值,但只能裝一件;
2. 每個人都很有個性,所以每個人的背包不會完全相同。
DaA 的團隊中有M 個人,那么對于整個團隊,背包價值和最大是多少呢?

輸入

第一行兩個整數M、N,表示團隊的人數和物品的數量。
接下來一行N 個整數,表示每件物品的價值wi。
數據保證不會出現有空背包人的出現。

輸出

一個整數,整個團隊背包價值的最大值。

樣例輸入

Sample Input 1:
2 3
2 7 1

Sample Input 2:
8 4
1 2 3 4

樣例輸出

Sample Output 1:
19

Sample Output 2:
58

數據范圍限制

【數據規模】
30%的數據 1<=M,N<=15。
60%的數據 1<=M<=200,1<=N<=100。
100%的數據 1<=M<=1,000,000,1<=N<=500,0< wi<=50。
輸出請注意使用64 位整數(Pascal 中的Int64,C++中的long long)。

提示

【樣例解釋】
19=(2+7+1)+(2+7)
58=(1+2+3+4)+(2+3+4)+(1+3+4)+(1+2+4)+(3+4)+(1+2+3)+(2+4)+(2+3)

分析
用 f[i]表示價值為 i 的背包的不同種數,可以用 DP 求出:
f[i] =∑ [i?w[j]]
然后從 ∑w[j] 開始從大到小枚舉 f[i],則這 f[i]種背包的總價值為 f[i]*i。枚舉
直到人數已經大于等于 M 的為止,統計一下答案就可以了。

程序:

var i,j:longint; tj,ans,n,m:int64; a:array[0..600]of int64; f:array[0..25100]of int64; beginassign(input,'team.in');reset(input);assign(output,'team.out');rewrite(output);readln(m,n);tj:=0;for i:=1 to n dobeginread(a[i]);tj:=tj+a[i];end;f[0]:=1;for i:=1 to n dofor j:=tj downto 0 doif j>=a[i] then f[j]:=f[j]+f[j-a[i]];ans:=0;for i:=tj downto 0 doif f[i]<=m thenbeginm:=m-f[i];ans:=ans+f[i]*i;end elsebeginans:=ans+i*m;break;end;write(ans);close(input);close(output); end.

轉載于:https://www.cnblogs.com/YYC-0304/p/9500088.html

總結

以上是生活随笔為你收集整理的JZOJ__Day 6:【普及模拟】团队背包(team)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。