zoukankan      html  css  js  c++  java
  • Hrbustoj 2252 完全背包

    一个变形的完全背包 题是第一次团队赛的热身题...看别人博客看到这道题忽然就不会了 然后想了半天还是没想出来...上oj找了提交排名..发现自己弄出来的奇怪的办法居然用时最短...

    问装m最低要多少的v

    想法是枚举v 从1开始无限往后 

    然后就是普通的完全背包 

    一旦dp[k]超过了m 立即break 然后输出v

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int main(){
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,m;
        scanf("%d%d",&n,&m);
        int val[n+1];
        int vol[n+1];
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&vol[i],&val[i]);
        }
        int v;
        for(v=1;;v++)
        {
            int h=0;
            int dp[v+1];
            memset(dp,0,sizeof(dp));
            for(int i=1;i<=n;i++)
            {
                if(h==1)break;
            for(int k=vol[i];k<=v;k++)
            {
                dp[k]=max(dp[k],dp[k-vol[i]]+val[i]);
                if(dp[k]>=m)
                   {
                       h=1;
                       break;
                   }
            }
            }
            if(h==1)break;
        }
        printf("%d
    ",v);
    }
    }
    

      

  • 相关阅读:
    面试遇到的相关问题
    webpack的学习之旅
    ajax请求数据
    css选择器
    对BFC的理解
    对React的理解
    获取DOM的真实节点
    翻转拼图网页小游戏制作
    acm比赛刷题小技巧
    动态规划 背包九讲的实现。
  • 原文地址:https://www.cnblogs.com/rayrayrainrain/p/5205644.html
Copyright © 2011-2022 走看看