zoukankan      html  css  js  c++  java
  • POJ 3211 Washing Clothes【01背包】

    题意:给出n种颜色,m件衣服,再分别给出m件衣服的颜色,和洗所需要的时间,dearboy和他的妹子一起洗衣服,且同种颜色的衣服不能同时洗,也不能两个人同时洗一件衣服,问洗完这m件衣服至少需要的时间

    先考虑怎样才能让时间最少的方案,肯定是dearboy和他的妹纸各洗一半的时间,这样消耗的时间最少,

    这样可以联想到杭电那一道big event in HDU,平均划分背包容量来做。

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<map>  
     6 #include<algorithm>  
     7 using namespace std;
     8 
     9 typedef long long LL;
    10 char color[15];
    11 int w[105][105],dp[1500000],sum[1005],num[1005];
    12 map<string,int> mp;
    13 
    14 int main()
    15 {
    16     int n,m,i,v,t,k,ans;
    17     while(scanf("%d %d",&n,&m)!=EOF&&n&&m)
    18     {
    19         memset(dp,0,sizeof(dp));
    20         for(i=0;i<n;i++) {
    21             scanf("%s",color);
    22             mp[color]=i;    //用map储存下每一种颜色对应的编号        
    23         }
    24         memset(sum,0,sizeof(sum));
    25         memset(num,0,sizeof(num));
    26         
    27         for(i=0;i<m;i++){
    28             scanf("%d %s",&t,color);
    29             int idx=mp[color];
    30             sum[idx]+=t;//每一种颜色一共需要洗的时间,相当于每一种颜色的总的背包容量 
    31             w[idx][num[idx]++]=t;//每一种颜色的衣服还对应有不同的洗的时间 
    32         }
    33         ans=0;
    34         for(k=0;k<n;k++){
    35             for(i=0;i<=sum[k];++i) dp[i]=0;//这里清零,用i<=sum[k]或者sum[k]/2都可以,但是用memset(dp,0,sizeof(dp))会超时 
    36             for(i=0;i<num[k];i++)
    37             {
    38                 for(v=sum[k]/2;v>=w[k][i];--v){
    39                     dp[v]=max(dp[v],dp[v-w[k][i]]+w[k][i]);
    40                 }            
    41             }
    42             ans+=sum[k]-dp[sum[k]/2];//将 每一种颜色所需要洗的时间加起来 
    43         }
    44         printf("%d
    ",ans);
    45     }
    46     return 0;    
    47 }
    View Code

    看的题解---好久之前看的这一题,当时不理解的是样例,为什么出现了yellow,可是没有给出黄色的衣服所需要洗的时间,后来发现这个没有影响,给出了哪些,就算哪些好了

  • 相关阅读:
    selenium基础--登录简单的网站
    git stash 用法总结和注意点
    爬取网易云超过十万的歌曲
    selenium自动化爬虫测试
    解决selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in P
    抓取网易云音乐的评论
    解释Crypto模块怎么就这么"皮"?No module named "Crypto"
    Windows系统下在Eclipse中集成Python
    bash 判断两个文件相等的代码
    Cassandra学习笔记
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4310254.html
Copyright © 2011-2022 走看看