POJ 3211 Washing Clothes(01背包)

http://poj.org/problem?id=3211

题意:

有m (1~10)种不同颜色的衣服总共n (1~100)件。Dearboy和她的girlfriend两个人要一起洗完所有衣服,为了预防色彩混合,他们每次仅仅能同一时候洗同一种颜色的衣服,给出洗完每件衣服所需的时间time和它的颜色color,求出Dearboy和她的girlfriend最少用多少时间能洗完毕所有衣服。

分析:

因为每种颜色的衣服是分开洗的, 所以我们能够把全部衣服按颜色分类, 然后每次看洗一种颜色的衣服最少须要花多少时间就可以.

如果当前第i种颜色的衣服要洗, 因为有两个人, 我们明显让这两个人洗衣服的时间尽量平均才干使得该种衣服洗的时间尽量短.

那么这就是一个01背包问题了, 选择衣服使得一个人洗衣服的时间在<=sum/2的前提下尽量长.

对于同一种颜色的衣服有以下01背包过程:

令dp[i][j]=x表示仅仅在前i件衣服里面选且总时间<=j时, 能达到的最大时间为x.

初始化: dp全为0.

状态转移: dp[i][j] = max( dp[i-1][j] , dp[i-1][j-time[i]]+time[i])

终于所求: 该种衣服所花时间== sum-dp[n][sum/2]. 当中sum为该种衣服所花时间总和.

终于我们把每种衣服花的时间累加起来就可以得到ans.

AC代码:

#include<cstdio>
#include<cstring>
#include<map>
#include<algorithm>
#include<iostream>
#include<string>
using namespace std;
const int maxn=100000+5; int n; //衣服件数
int m; //颜色种数
int dp[maxn];
int num[10+5]; //num[i]=x表第i类颜色衣服有x个
int val[10+5][100+5];//val[i][j]=x表第i类颜色的第j个衣服须要花x时间洗
map<string,int> mp; //颜色与编号的映射 int main()
{
while(scanf("%d%d",&m,&n)==2)
{
if(n==0&&m==0) break;
memset(num,0,sizeof(num)); //读取输入,存入相应数组
for(int i=1;i<=m;i++)
{
string s;
cin>>s;
mp[s]=i;
}
for(int i=1;i<=n;i++)
{
int x;
string s;
cin>>x>>s;
int type=mp[s];
val[type][++num[type]]=x;
} //做最多m次01背包
int ans=0;
for(int k=1;k<=m;k++)
{
//1次01背包
int sum=0;
memset(dp,0,sizeof(dp));
for(int i=1;i<=num[k];i++)
sum+= val[k][i];
for(int i=1;i<=num[k];i++)
{
for(int j=sum/2;j>=val[k][i];j--)
dp[j] = max(dp[j], dp[j-val[k][i]]+val[k][i]);
}
//累计结果
ans+= sum-dp[sum/2];
}
printf("%d\n",ans);
}
return 0;
}

POJ 3211 Washing Clothes(01背包)的更多相关文章

  1. POJ 3211 Washing Clothes 0-1背包

    题目大意: xxx很懒,但他有个漂亮又勤奋的女友 (尼玛能不能不刺激我,刚看到这题的时候发现自己的衣服没洗!!!) 可以帮他洗衣服. 洗衣服的时候要求不同的颜色的衣服不能同时洗.一人洗一件的话,问最短 ...

  2. POJ 3211 Washing Cloths(01背包变形)

    Q: 01背包最后返回什么 dp[v], v 是多少? A: 普通01背包需要遍历, 从大到小. 但此题因为物品的总重量必定大于背包容量, 所以直接返回 dp[V] 即可 update 2014年3月 ...

  3. poj 3211 Washing Clothes(背包)

    很不错的01背包!!! 不过有点疑问!!!(注释) #include <algorithm> #include<stdio.h> #include<string.h> ...

  4. [POJ 3211] Washing Clothes (动态规划)

    题目链接:http://poj.org/problem?id=3211 题意:有M件衣服,每种衣服有一种颜色,一共有N种颜色.现在两个人洗衣服,规则是必须把这一种颜色的衣服全部洗完才能去洗下一种颜色的 ...

  5. poj 3211 Washing Clothes

    // 题意 :夫妻两洗衣服,衣服有m种颜色,每种颜色又有若干件,每件衣服洗完需要特定的时间,要求每种颜色放在一起洗,洗完才能洗其他衣服.最后问洗完需要的最少时间// 将衣服按颜色分类 然后求出每种颜色 ...

  6. POJ 3211 Washing Clothes【01背包】

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

  7. POJ 3211 Washing Clothes 背包题解

    本题是背包问题,可是须要转化成背包的. 由于是两个人洗衣服,那么就是说一个人仅仅须要洗一半就能够了,由于不能两个人同一时候洗一件衣服,所以就成了01背包问题了. 思路: 1 计算洗完同一颜色的衣服须要 ...

  8. [POJ 2184]--Cow Exhibition(0-1背包变形)

    题目链接:http://poj.org/problem?id=2184 Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  9. POJ 3624 Charm Bracelet(01背包裸题)

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 38909   Accepted: 16862 ...

随机推荐

  1. Server-Side Rendering(服务端渲染)的优点与缺点

    优点 1. SEO 客户端渲染,页面中只有初始的几个html容器,js生成内容填充到容器中,爬虫只能识别到初始的html容器,js生成的内容一般不会被识别,而服务端渲染直接给出html,爬虫可以识别到 ...

  2. 学习 WebService 第二步:知识准备——SOAP vs REST(wsdl和wadl区别)(转)

    原文地址:蓝精灵——默默争上游 笔记: SOAP和REST是两种实现WebService的主要方案(Web API部署REST貌似占了大半壁江山) REST Web Services 基于 HTTP ...

  3. Java面试题之Java中==和equals()和hashCode()的区别

    “==”: ==是运算符,用来比较两个值.两个对象的内存地址是否相等: “equals()”: equals是Object类的方法,默认情况下比较两个对象是否是同一个对象,内部实现是通过“==”来实现 ...

  4. Linux System Programming 学习笔记(十一) 时间

    1. 内核提供三种不同的方式来记录时间 Wall time (or real time):actual time and date in the real world Process time:the ...

  5. poj 2079 Triangle

    Triangle Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 9835   Accepted: 2951 Descript ...

  6. javaweb学习总结(十八)——JSP属性范围(转)

    所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...

  7. Ruby自动化测试(操作符的坑)

    事情是这样的: times++ @ddr = DDR::DDR.new() 执行到这里的时候,总是报错:'+@' undefied method.刚开始的时候以为是机器在重启过程中一些不稳定函数调用或 ...

  8. perfect-scrollbar 轻量级滚动插件

    它是一个轻量级的jquery插件. 需要引入的文件: css: #box { position: absolute; overflow: hidden; height: 200px; width: 2 ...

  9. Codeforces Gym101606 D.Deranging Hat (2017 United Kingdom and Ireland Programming Contest (UKIEPC 2017))

    D Deranging Hat 这个题简直了,本来想的是冒泡排序然后逆着输出来的,后来发现不对,因为题目上求的是最优解,而且冒泡的话,输出结果有的超出10000行了,所以就是把一开始的,排好序的字母标 ...

  10. Nginx日志参数、location匹配规则、设置密码

    1.三个参数 a)$http_referer:记录此次请求是从哪个链接访问过来的: 是直接访问,还是从其他网站跳转过来的. 例如:访问:http://www.etiantian.com/,其页面首页是 ...