题解 | #装箱问题#

装箱问题

http://www.nowcoder.com/practice/c990bd0bf8e04bfbb19c0964401c8f77

解题思路:

  • 典型的01背包,转换结果为VdpVV-dp_V,求dpVdp_V的最大值即可。
dpj=max(dpj,dpjvi+vi)dp_j = \max(dp_j, dp_{j-v_i}+v_i)
#include<bits/stdc++.h>
using namespace std;
int main(){
    int V, n;
    ios::sync_with_stdio(false);
    cin>>V>>n;
    vector<int> v(n+1);
    for(int i = 1; i <= n; ++i)
        cin>>v[i];
    vector<int> dp(V+1);
    for(int i = 1; i <= n; ++i){
        for(int j = V; j >= v[i]; --j){
            dp[j] = max(dp[j], dp[j-v[i]] + v[i]);
        }
    }
    cout<<V-dp[V]<<endl;
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-18 16:15
点赞 评论 收藏
分享
白火同学:大二有这水平很牛了,可以适当对关键信息加粗一点,比如关键技术、性能指标之类的。
点赞 评论 收藏
分享
05-09 13:22
门头沟学院 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 14:35
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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