您的位置:首页 > 其它

uva 10465 Homer Simpson (完全背包)

2015-03-20 21:09 483 查看

uva 10465 Homer Simpson

题目大意:有两种汉堡,给出吃每种汉堡的时间,以及总时间。求出在充分利用时间的前提下,能吃的最多的汉堡数量。当无法利用所有时间时,再在汉堡数量后面输出剩余的时间。

解题思路:完全背包。

[code]#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdlib>
typedef long long ll;
using namespace std;
ll dp[20005];
int main() {
    int num[2], sum;    
    while (scanf("%d %d %d", &num[0], &num[1], &sum) == 3) {
        memset(dp, 0, sizeof(dp));
        dp[0] = 1;
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j <= sum; j++) {
                if (dp[j] && dp[j + num[i]] < dp[j] + 1) {
                    dp[j + num[i]] = dp[j] + 1;
                }
            }
        }
        int cnt = 0;
        while (!dp[sum]) {
            sum--;
            cnt++;
        }
        printf("%lld", dp[sum] - 1);
        if (cnt) printf(" %d", cnt);
        printf("\n");
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: