国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Uva12325 Zombie's Treasure Chest【分類枚舉】【例題7-11】

2019-11-08 02:03:22
字體:
來源:轉載
供稿:網友

題目:Zombie's Treasure Chest

題意:有一個體積為N的箱子和兩種數量無限的寶物。 寶物1的體積為S1,價值為V1;寶物2的體積為S2,價值為V2。你的任務是計算最多能裝多大價值的寶物。

思路:分倆種情況枚舉:

枚舉1:當s1或s2的體積很大(即n/s1  n/s2 很小)時,枚舉較大體積的那個寶物即可。

枚舉2:當s1和s2的體積很小,但N又很大時,此時按枚舉1來就超時了,由題可得:S2個寶物1和S1個寶物2的體積相等,而價值分別為S2*V1和S1*V2。所以當前者較大時,寶物2最多s1-1個,因為以上的條件可知,當體積相等的條件下寶物1的價值大,所以寶物2不能再超出那個范圍了,這樣寶物1就不能放到最大化,總價值就不是最大化。后者較大時同理。 所以將倆種寶物都枚舉后取最大的。

參考:入門經典-例7-11-P210 + 紫書代碼庫

代碼:

#include <iostream>#include <cstdio>using namespace std;typedef long long ll;const int maxn = 65536;inline ll fun(ll tal,ll n,ll s1,ll s2,ll v1,ll v2){    ll ans = 0;    for(ll i=0;i<=n;i++) ans = max(ans,i*v2 + (tal-s2*i)/s1 * v1);return ans;}int main(){    ll T,n,s1,s2,v1,v2,ans,kcase = 1;    scanf("%lld",&T);    while(T--){        scanf("%lld%lld%lld%lld%lld",&n,&s1,&v1,&s2,&v2);        if( s1 > s2) swap(s1,s2),swap(v1,v2);//s2作為較大的        if((double)n / s2 > maxn) ans = max(fun(n,s1,s1,s2,v1,v2),fun(n,s2,s2,s1,v2,v1));//倆個都很小        else ans = fun(n,n/s2,s1,s2,v1,v2);//        PRintf("Case #%lld: %lld/n",kcase++,ans);    }    return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扎赉特旗| 荥阳市| 甘孜县| 唐山市| 厦门市| 娄烦县| 阜阳市| 通山县| 田阳县| 高安市| 雅安市| 泸定县| 乌拉特中旗| 丰城市| 长汀县| 泽州县| 宣威市| 普定县| 武平县| 仁寿县| 龙陵县| 巴彦县| 湟源县| 兰西县| 淮阳县| 祁连县| 贺兰县| 盐山县| 通榆县| 鹤岗市| 琼结县| 元朗区| 子长县| 定日县| 永清县| 平邑县| 茂名市| 普兰县| 崇左市| 元谋县| 比如县|