zoukankan      html  css  js  c++  java
  • poj 3628 Bookshelf 2 基本01背包

    题目大意:FJ有n头奶牛,和一个高为h的架子,给出每头奶牛高度,求使奶牛叠加起来超过架子的最低高度是多少。

    题目思路:求出奶牛叠加能达到的所有高度,并用dp[]保存,最后进行遍历,找出与h差最小的dp[]即所求答案。

    #include<cstdio>
    #include<stdio.h>
    #include<cstdlib>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #include<queue>
    #define INF 0x3f3f3f3f
    #define MAX 2000005
    
    using namespace std;
    
    int dp[MAX],a[MAX],sum,ans;
    
    void Init()
    {
        sum=0;
        ans=INF;
        memset(dp,0,sizeof(dp));
    }
    int main()
    {
        int i,j,maxn,n,h;
    
        while(scanf("%d%d",&n,&h)!=EOF)
        {
            Init();
    
            for(i=1;i<=n;i++)
                {scanf("%d",&a[i]);sum+=a[i];}
    
            for(i=1;i<=n;i++)
            {
                for(j=sum;j>=a[i];j--)
                {
                    dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
                }
            }
    
            for(i=1;i<=sum;i++)
            {
                if(dp[i] >= h)//如果满足条件,则继续进行比较,保留较小的值
                {
                    ans=min(ans,dp[i]-h);
                }
            }
    
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    CSP2019滚粗记
    [总结] wqs二分学习笔记
    [总结] 圆方树学习笔记
    [CF960G] Bandit Blues
    [总结] 第一类斯特林数
    [EOJ629] 两开花
    [CF286E] Ladies' shop
    [总结] 动态DP学习笔记
    [BZOJ3879] SvT
    [总结] 替罪羊树学习笔记
  • 原文地址:https://www.cnblogs.com/alan-W/p/5737998.html
Copyright © 2011-2022 走看看