国产探花免费观看_亚洲丰满少妇自慰呻吟_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;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿荣旗| 岳池县| 玉屏| 天柱县| 石景山区| 乐平市| 南皮县| 贡嘎县| 达孜县| 内丘县| 盱眙县| 永新县| 万山特区| 阿合奇县| 岢岚县| 家居| 平定县| 本溪| 新田县| 赣州市| 宜兰县| 南溪县| 拜泉县| 都匀市| 涞源县| 响水县| 宁波市| 东港市| 西峡县| 广灵县| 吕梁市| 民和| 宽城| 杭锦后旗| 边坝县| 微山县| 内江市| 尼玛县| 隆安县| 府谷县| 五大连池市|