题解 | dp问题

点菜问题

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

#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;

#define fas(i,a,b) for(int i=a;i<b;++i) //[)
#define fdes(i,b,a) for(int i=b;a<=i;--i) //[]
#define mm memset

const int MAXN=100;
const int MAXC=1000;
int dp[MAXC+1];
int v[MAXN];
int w[MAXN];
int main() 
{
    int c,n;
    while (cin >> c>>n) 
    { 
        fas(i,0,n)
            cin>>w[i]>>v[i];
        mm(dp,0,(MAXC+1)*sizeof(int));
        fas(i,0,n)
        {
            fdes(j,MAXC,0)
            {
                if(w[i]<=j)
                {
                    dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
                }
            }
        }
        cout<<dp[c]<<endl;   
        
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

06-05 19:46
已编辑
武汉大学 后端
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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