题解 | #点菜问题#

0-1 背包问题
dp方程 dp[i][j] = max(dp[i-1][j] (不放入),dp[i-1][j-w[i]]+V[i] (放入))
由于至于上一行有关可以简化
dp[j] = max(dp[j],dp[j-W[i]])
坑点:注意循环写法
for(int i=0;i<N;i++)
  for(int j = C;j>=W[i];j--)
#include<iostream>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
    int C,N;
    while(cin>>C&&cin>>N){
        int V[N];int W[N];
        for(int i =0;i<N;i++){
            cin>>W[i]>>V[i];
        }
        int dp[C+1];
        memset(dp,0,sizeof(dp));
        for(int i=0;i<N;i++){
           for(int j=C;j>=W[i];j--){
               dp[j] = max(dp[j],dp[j-W[i]]+V[i]);
           }
        }
        cout<<dp[C]<<"\n";
    }
    
}
全部评论

相关推荐

11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务