zoukankan      html  css  js  c++  java
  • csu 1547: Rectangle (01背包)

    题意:说有1*x和2*x的长方形(1和2只能作为宽 )
    有一个2*m的空间
    问如何组合才能使m的值最小 思路:对2x的长方形不需要得讨论
    对1x的长方形的记录总长度 并01背包
    找到最接近sum/2 的值
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<stdlib.h>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<ctype.h>
    using namespace std;
    const int MAXN=100+5;
    int vis[10000+100];
    int a[MAXN];
    int cmp(int a,int b)
    {
        return a>b;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n,ans=0,cnt=0,res=0,maxn=0,minn,numa=0,numb=0,sum=0;
            scanf("%d",&n);
            for(int i=0;i<n;i++)
            {
                int op,num;
                scanf("%d %d",&op,&num);
                if(op==2) ans+=num;
                if(op==1) {a[cnt++]=num;sum+=num;}
            }
            if(cnt>0)
            {
               memset(vis,0,sizeof(vis));
               vis[0]=1;
               for(int i=0;i<cnt;i++)
               {
                   for(int j=10000;j>=a[i];j--)
                   {
                       if(vis[j-a[i]]==1) vis[j]=1;
                   }
               }
               int hsum=(sum+1)/2;
               int l=hsum;//r=hsum;
               while(vis[l]==0)
               {
                   l--;
               }
               maxn=max(l,sum-l);
            }
            res=ans+maxn;
            printf("%d
    ",res);
        }
        return 0;
    }
    

      

  • 相关阅读:
    java面向对象编程(七)--四大特征之多态
    java面向对象编程--Josephu问题(丢手帕问题)
    好文推荐
    树状数组学习笔记
    B2104 矩阵加法
    B2107 图像旋转
    B2128 素数个数
    求细胞数量
    洛谷 CF863A Quasi-palindrome
    30秒搞定所有英文连读
  • 原文地址:https://www.cnblogs.com/sola1994/p/4376362.html
Copyright © 2011-2022 走看看