题解 | #点菜问题#

点菜问题

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;
    }
}

全部评论

相关推荐

09-29 11:19
门头沟学院 Java
点赞 评论 收藏
分享
尊尼获获:闺蜜在哪?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务