sdut2408 pick apples (貪心+背包)山東省第三屆ACM省賽

來源:互聯網
上載者:User

標籤:acm   c++   動態規劃   c   

本文出自:http://blog.csdn.net/svitter/


題意:三種蘋果,每種都有對應的Size,Value,給你一個背包空間,求最大的價值。

本題目的關鍵就在於非常大的背包空間

依據indicates the size (1 <= S<= 100) 我們可以考慮在1000000(100^3)之外的空間放性價比最高的蘋果。為什麼時100^3?

要知道背包如果正好填滿,而填滿空間相應價值的蘋果大於不填滿的價值的蘋果,那麼就選擇能填滿空間而使價值最大的蘋果,而非性價比最高的蘋果——性價比高的蘋果可能因為剩下的空間不足,而造成空間利用不充分達不到最大價值。100^3大於任何3個蘋果的Size的最大公倍數,所以選擇100^3這個數字。


另:之前把f[1000001]初值賦值為-1, 以此來求背包- =太水了= =完全沒有考慮到最後一個f[BagSize]可能為-1的情況,然後寫了一個找不是-1的最大Bag值,又水了- =當賦值-1的時候,未必最大的就是空間用的最多的。

簡單舉例:

BagSize 60, a[1] 59/30, a[2].size 58/31 a[3].size 57/32;

貼代碼:

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;#define lln long long intstruct Apple{    int Value;    int Size;    double Cost;};Apple a[3];lln f[1001000];void ace(){    int t, i, j, no, most;    int BagSize, tempBag;    double cost;    lln RestNum, ans, RestValue;    int Size;    scanf("%d", &t);    for(no = 1; no <= t; no++)    {        memset(f, 0, sizeof(f));        f[0] = 0;        most = 0; cost = 0;        for(i = 0; i < 3; i++)        {            scanf("%d %d", &a[i].Size, &a[i].Value);            a[i].Cost = ((double) a[i].Value) / a[i].Size;            if(a[i].Cost > cost)//find the most            {                most = i;                cost = a[i].Cost;            }        }        scanf("%d", &BagSize);        RestNum = 0;        RestValue = 0;        //大於1000的時候,把性價比最高的蘋果填入        if(BagSize > 1000000)        {            tempBag = BagSize - 1000000;            RestNum = tempBag / a[most].Size;            BagSize -= RestNum * a[most].Size;            RestValue = RestNum * a[most].Value;        }        //剩餘的蘋果使用背包        for(i = 0; i < 3; i++)        {            Size = BagSize - a[i].Size;            for(j = 0; j <= Size; j++)            {                f[j + a[i].Size] = max(f[j + a[i].Size], f[j] + a[i].Value);            }        }        ans = RestValue + f[BagSize];        printf("Case %d: %lld\n", no, ans);    }}int main(){    ace();    return 0;}


sdut2408 pick apples (貪心+背包)山東省第三屆ACM省賽

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.