题解 | The Eating-牛客假日团队赛5E题

E-The Eating Puzzle_牛客假日团队赛5

https://ac.nowcoder.com/acm/contest/984/E

题目描述

Bessie is on a diet where she can eat no more than calories per day. Farmer John is teasing her by putting out buckets of feed, each with some (potentially non-unique) number of calories (range: 1..35,000). Bessie has no self-control: once she starts on a feed bucket, she consumes all of it.
Bessie is not so good at combinatorics. Determine the optimal combination of feed buckets that gives Bessie as many calories without exceeding the limit C.
As an example, consider a limit of 40 calories and 6 buckets with 7, 13, 17, 19, 29, and 31 calories. Bessie could eat 7 + 31 = 38 calories but could eat even more by consuming three buckets: 7 + 13 + 19 = 39 calories. She can find no better combination.

输入描述:

Line 1: Two space-separated integers: C and B
Line 2: B space-separated integers that respectively name the number of calories in bucket 1, 2, etc.

输出描述:

Line 1: A single line with a single integer that is largest number of calories Bessie can consume and still stay on her diet.

示例1

输入
40 6
7 13 17 19 29 31
输出
39

解答

注意dp数组的初始化,状态方程:

for i=1..N

    forv=V..0

       f[v]=max{f[v],f[v-c[i]]+w[i]};

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
int main(){
    int V,n;
    int w[25],dp[35005];
    scanf("%d%d",&V,&n);
    for (int i = 0;i < n;i++) scanf("%d",&w[i]);
    memset(dp,0,sizeof(dp));
    for (int i = 0;i < n;i++){
        for (int j = V;j >= w[i];j--){
            dp[j] = max(dp[j],dp[j-w[i]]+w[i]);
        }
    }
    printf("%d\n",dp[V]);
    return 0;
}

来源:Mizersy
全部评论

相关推荐

昨天 12:09
门头沟学院 Java
讲的口干舌燥,头都晕了怎么要讲这么长啊
码农索隆:没事,你口干舌燥,他不一定会看,
投递小鹏汽车等公司7个岗位
点赞 评论 收藏
分享
07-11 11:15
中南大学 Java
好可爱的hr姐姐哈哈哈哈
黑皮白袜臭脚体育生:兄弟们貂蝉在一起,吕布开了
点赞 评论 收藏
分享
07-07 12:47
门头沟学院 Java
码农索隆:竟然还真有卡体检报告的
点赞 评论 收藏
分享
鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务