关闭

UVALive3637(01背包+贪心)

标签: acmuvadp
215人阅读 评论(0) 收藏 举报
分类:

链接:点击打开链接

题意:给出n本书的高和宽,要求做一个三层的书架,将所有书放入书架中,每层不能为空,每层的高度为当层最高的数的高度,当层的宽度为当层所有书的宽度和,书架的宽度为三层的最大宽度,书架的高度为三层的高度和,求书架高度乘宽度的最小值

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
struct node{
    int h,w;
    friend bool operator<(node a,node b){
        return a.h>b.h;
    }
}s[105];
int dp[2505][2505];
int main(){                                     //dp[i][j]表示第二层和第三层宽为i和j
    int t,n,i,j,k,ans,sum;                      //的两层高的和最小是多少
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        sum=0;
        for(i=0;i<n;i++){
        scanf("%d%d",&s[i].h,&s[i].w);
        sum+=s[i].w;
        }
        sort(s,s+n);                            //按照高进行排序,因为最高的那一层
        memset(dp,INF,sizeof(dp));              //高已知,所以进行背包时可以不用算
        dp[0][0]=0;                             //最高的那个,那么推出两层后可以直
        for(i=1;i<n;i++){                       //接算出三层
            for(j=sum;j>=0;j--){
                for(k=sum;k>=0;k--){
                    if(j==0)                    //只有在一层刚放第一个时会增加高度
                    dp[j+s[i].w][k]=min(dp[j+s[i].w][k],dp[j][k]+s[i].h);
                    else
                    dp[j+s[i].w][k]=min(dp[j+s[i].w][k],dp[j][k]);
                    if(k==0)
                    dp[j][k+s[i].w]=min(dp[j][k+s[i].w],dp[j][k]+s[i].h);
                    else
                    dp[j][k+s[i].w]=min(dp[j][k+s[i].w],dp[j][k]);
                }
            }
        }
        ans=INF;
        for(i=1;i<=sum;i++)
        for(j=1;j<=sum;j++)
        if(dp[i][j]!=INF)                       //求出第一层的宽
        ans=min(ans,max(sum-i-j,max(i,j))*(dp[i][j]+s[0].h));
        printf("%d\n",ans);
    }
    return 0;
}

0
0
查看评论

从01背包学习贪心算法和动态规划

从01背包学习贪心算法和动态规划: 算法的思路其实很大程度上都是相通的,比如在提升算法运行时间的不断探索中,我们用分治的思想来将一个大问题分解为很多小问题进行求解,并且这些子问题与原问题的结构是一样的,比如归并排序,比如第i层是排四个数,第i+1层则是排八个数,问题的规模发生变化但结构不变。而动态...
  • u014449866
  • u014449866
  • 2015-05-01 21:31
  • 2159

【算法笔记】贪心算法——01背包问题

插入代码块#include<iostream> using namespace std;int main(){ int n; //物品数 float c; //背包容量 float res = 0; cin>>n>>c; fl...
  • MASILEJFOAISEGJIAE
  • MASILEJFOAISEGJIAE
  • 2016-05-29 12:06
  • 2350

01背包的四种解法详解:动态规划,贪心法,回溯法,优先队列式分支限界法(C语言编写)

最近刚完成了算法课程设计,题目是用多种解法解决01背包问题,经过一番探索,终于成功的用四种方法完成了本次实验,下面记录分享一下成果: 首先解释下什么是01背包问题:给定一组共n个物品,每种物品都有自己的重量wi, i=1~n和价值vi, i=1~n,在限定的总重量(背包的容量C)内,如何选择才能使得...
  • u010729348
  • u010729348
  • 2013-12-09 11:32
  • 3053

CF - 808E. Selling Souvenirs - 01背包dp+排序+贪心/三分优化

1.题目描述: E. Selling Souvenirs time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output ...
  • dragon60066
  • dragon60066
  • 2017-05-18 20:42
  • 223

贪心算法_01背包问题_Java实现

什么是贪心算法?是指在对问题进行求解时,总是做出当前看来是最好的选择。也就是说,不从整体最优上加以考虑,所得出的结果仅仅是某种意义上的局部最优解。因此贪心算法不会对所有问题都能得到整体最优解,但对于很多问题能产生整体最优解或整体最优解的近似解。
  • ljmingcom304
  • ljmingcom304
  • 2015-12-15 09:41
  • 4453

【01背包】Uvalive4015 Caves && Uvalive3637 The Bookcase

我要相信LA已经挂掉了 不管是我的代码还是网上的AC代码 交上去全是WA WA WA!!! so。。我也不知道我写的到底能不能过。。。以后找时间交吧。。 QAQ两道01背包。。当时学背包就没好好学T_T于是………… Uvalive4015 Caves 题意:(不吐槽lrj那个语死...
  • qq_21841245
  • qq_21841245
  • 2015-04-01 18:36
  • 596

算法导论第16章 贪心算法-0-1背包问题—动态规划求解

1、前言   前段时间忙着搞毕业论文,看书效率不高,导致博客一个多月没有更新了。前段时间真是有些堕落啊,混日子的感觉,很少不爽。今天开始继续看算法导论。今天继续学习动态规划和贪心算法。首先简单的介绍一下动态规划与贪心算法的各自特点及其区别。然后针对0-1背包问题进行讨论。最后给出一个简单的测试...
  • u014627487
  • u014627487
  • 2015-01-21 16:07
  • 5477

贪心_01背包

package agrisom; import java.text.DecimalFormat; import java.text.NumberFormat; /**  * 贪心算法求背包问题  */ /**  * 物品类  */ c...
  • zhangheliang2010
  • zhangheliang2010
  • 2012-10-25 15:07
  • 714

动态规划、贪心、回溯、分支限界法解0-1背包问题总结

本文通过0-1背包问题的不同解法,深入理解计算机常用算法动态规划、贪心、回溯、分支限界法的思想。 问题描述 0-1背包问题:给定n种物品和一背包。物品i的重量是wi,其价值是vi,背包的容量为C。问:应该如何选择装入背包的物品,使得装入背包中物品的总价值最大? 简单n=3的例子:设w=[16,1...
  • ktigerhero3
  • ktigerhero3
  • 2015-12-23 10:44
  • 7029

01背包问题详解

首先非常感谢刘汝佳的小白书、HDU刘春英老师的ACM程序设计背包算法课件以及dd_engi的背包九讲和众多大神的博客,看这么多资料最后花了整整一天时间才算大致弄懂了背包问题的思路(=_=搞这么久我确实有点笨=_=)。OK,接下来就大致讲一下我所理解的背包问题,对这些问题做一下梳理总结,便于以后的复习...
  • qq_33171970
  • qq_33171970
  • 2016-01-25 13:53
  • 3350
    个人资料
    • 访问:180928次
    • 积分:7002
    • 等级:
    • 排名:第3905名
    • 原创:536篇
    • 转载:0篇
    • 译文:0篇
    • 评论:49条
    友情链接
    博客专栏