题解 | #点菜问题#

点菜问题

https://www.nowcoder.com/practice/b44f5be34a9143aa84c478d79401e22a

#include <iostream>
#include <iterator>
using namespace std;

struct f
{
    int m;//每道菜的价格
    int y;//每道菜的营养
};

int main() {
    int C,N;//C:钱 N:个数
    while(cin>>C>>N)
    {
        f a[N];
        for(int i=0;i<N;++i)
        {
            cin>>a[i].m>>a[i].y;
        }
        int k[N][C+1];

        for(int i=0;i<N;++i)
        {
            for(int j=0;j<=C;++j)
            {
                if(j < a[i].m)
                {
                    if(i-1>=0)
                    {
                        k[i][j] = k[i-1][j];
                    }
                    else 
                    {
                        k[i][j] = 0;
                    }
                }
                else 
                {
                    if(i-1>=0)
                    {
                        if(a[i].y+k[i-1][j-a[i].m]>k[i-1][j])
                        {
                            k[i][j] = a[i].y+k[i-1][j-a[i].m];
                        }
                        else 
                        {
                            k[i][j] = k[i-1][j];
                        }
                    }
                    else 
                    {
                        k[i][j] = a[i].y;
                    }
                }
            }
        }
        cout<<k[N-1][C]<<endl;
    }
}

全部评论

相关推荐

02-10 12:23
已编辑
新余学院 C++
采集想要offer:专业技能那里要一条一条的列出来吧,感觉你项目很厉害了,但是如果你不写技术栈面试官对你项目不太懂的话都没办法问你八股😂C++都是基架岗,都是一群9✌🏻在卷,我觉得你要是有时间学个go把MySQL和redis写上去找个开发岗吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务