本题是背包问题,可是须要转化成背包的。

由于是两个人洗衣服,那么就是说一个人仅仅须要洗一半就能够了,由于不能两个人同一时候洗一件衣服,所以就成了01背包问题了。

思路:

1 计算洗完同一颜色的衣服须要的总时间totTime

2 利用动态规划背包法求这些衣服能在那些时间点完毕

3 求比(totTime+1)/2大的最小时间点

4 得到洗一种颜色衣服的时间,那么继续求下洗一种颜色衣服的时间

5 最后加起来就是答案了。

这个是算法问题。

剩下来就是考编程功力了。由于给出的数据,须要我们自己把衣服分类,分类之后再对每一种颜色衣服进行动态规划法。

会使用map就不难了。

我这里是使用map,然后把颜色转化为整数,然后利用vector容器保存分类结果的。

用好vector也不用操心数组不够大的问题,只是vector却是比一般数组慢一点点的。

#include <stdio.h>
#include <map>
#include <string>
#include <vector>
using std::map;
using std::string;
using std::vector; int bagDP(vector<vector<int> > &cl)
{
int washTime = 0;
for (int i = 0; i < (int)cl.size(); i++)
{
int totTime = 0;
for (int j = 0; j < (int)cl[i].size(); j++)
totTime += cl[i][j]; vector<bool> tbl(totTime+1);
tbl[0] = true;
for (int j = 0; j < (int)cl[i].size(); j++)
{
for (int t = totTime; t >= cl[i][j]; t--)
if (tbl[t-cl[i][j]]) tbl[t] = true;
}
int t = (totTime+1)>>1;
for ( ; t <= totTime && !tbl[t]; t++);
washTime += t;
}
return washTime;
} int main()
{
int colorM, clothN, time;
char col[12];
while (scanf("%d %d", &colorM, &clothN) && colorM)
{
map<string, int> siMp;//for classifying
string s;
int c = 0;
for (int i = 0; i < colorM; i++)
{
scanf("%s", col);
s = col;
siMp[s] = c++;
}
vector<vector<int> > clothes(siMp.size());
for (int i = 0; i < clothN; i++)
{
scanf("%d %s", &time, col);
s = col;
clothes[siMp[s]].push_back(time);
}
siMp.clear();
printf("%d\n", bagDP(clothes));
}
return 0;
}

POJ 3211 Washing Clothes 背包题解的更多相关文章

  1. poj 3211 Washing Clothes(背包)

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

  2. POJ 3211 Washing Clothes(01背包)

    POJ 3211 Washing Clothes(01背包) http://poj.org/problem?id=3211 题意: 有m (1~10)种不同颜色的衣服总共n (1~100)件.Dear ...

  3. POJ 3211 Washing Clothes【01背包】

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

  4. POJ 3211 Washing Clothes 0-1背包

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

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

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

  6. poj 3211 Washing Clothes

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

  7. POJ 3211 (分组01背包) Washing Clothes

    题意: 小明有一个贤妻良母型的女朋友,他们两个一起洗衣服. 有M种颜色的N件衣服,要求洗完一种颜色的衣服才能洗另外一种颜色. 两人可以同时洗,一件衣服只能被一个人洗. 给出洗每件衣服所用的时间,求两个 ...

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

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

  9. POJ 2392 Space Elevator 背包题解

    多重背包.本题不须要二分优化.相对简单点.由于反复数十分小,小于10. 而添加一个限制每种材料的高度做法.假设使用逆向填表,那么仅仅须要从这个高度往小递归填表就能够了. 还有就是注意要排序,以限制高度 ...

随机推荐

  1. [hihoCoder] 骨牌覆盖问题·一

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题:我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘.对 ...

  2. [na]双绞线线序+POE供电网线

    0 重点-8根线的细节 传输数据线: 一般情况下会用1236(橙白.橙.绿白.绿)传输数据,1.2用于发送,3.6用于接收, 供电线: 45(蓝.蓝白)电源正极 78(棕白.棕)电源负极. 一 网线线 ...

  3. iOS中使用block传值

    转自:http://blog.sina.com.cn/s/blog_60b45f230100yiaf.html 用此方法传值可以替代委托了.具体例子: MainView.h #import <U ...

  4. CyclicBarrier分析与实例

    一,介绍 ​CyclicBarrier是一个保持多个线程共享同一个状态的工具类. 也就是说在多线程环境下,能够通过设定某一个状态来达到线程之间的同步.这个类有两个有參构造方法.各自是CyclicBar ...

  5. JS中split用法和数组中元素的删除

    JS中split用法 <script language="javascript"> function spli(){ datastr="2,2,3,5,6,6 ...

  6. LeetCode: Divide Two Integers 解题报告

    Divide Two Integers Divide two integers without using multiplication, division and mod operator. SOL ...

  7. VBA学习笔记(9)--生成点拨(1)

    说明(2017.3.26): 1. 还没写完,写到新建文件夹了,下一步新建word,重命名,查找点拨,把点拨复制进去,因为要给点拨编号,应该会很麻烦 Public Sub test1() Dim pa ...

  8. Unity又称Unity Application Block

    本文关注以下方面(环境为VS2012..Net Framework 4.5以及Unity 3): Ioc/DI简介: Unity简单示例 一.Ioc/DI简介 IoC 即 Inversion of C ...

  9. 【Unity笔记】关于UGUI的根节点Canvas

    创建UGUI物体时,会自动创建Canvas物体作为所有UGUI的根节点.该物体身上有个Canvas脚本,Render Mode渲染模式选项: Screen Space - Overlay:即使场景中没 ...

  10. 浅谈WebService的调用<转>

    0.前言 前段时间,公司和电信有个合作,产品对接电信的某个平台,使用了WebService接口的调用,实现了业务受理以及单点登录.终于使用到了WebService,楼主还是比较兴奋的,目前功能已经上线 ...