大体题意:有n件衣服,m种颜色,某人和他的女炮一起洗衣服,必须一种颜色洗完,才能洗另一种颜色,每件衣服都有时间,那个人洗都一样,问最少用时。

poj万恶的C++和G++,害得我CE了三次

/*
背包啊……竟然有这么多玩法
不知道是不是被树形DP搞晕了,一上来就设了个三维数组,“f[i][j][0]代表前i件衣服,
时间差为j,且男生洗得多的时间”。搞了两个小时发现思路错了,这样会使两个背包毫无差别,
答案一定是错的。
正解:对于每种颜色,做一个01背包求方案树,加入j这个体积能填出来,那么另一个背包体积是
sum-j,那么ans=min(ans,max(j,sum-j))
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<map>
#include<vector>
#define N 110
#define M 100010
#define INF 10000010
using namespace std;
int f[M],num[N],sum[N],w[N][N],n,m;
map<string,int> color;
void init()
{
for(int i=;i<=n;i++)
{
string s;
cin>>s;
color[s]=i;
}
for(int i=;i<=m;i++)
{
int t;string s;
scanf("%d",&t);cin>>s;
int c=color[s];
num[c]++;
w[c][num[c]]=t;
sum[c]+=t;
}
int tot=;
for(int T=;T<=n;T++)
{
if(!num[T])continue;
memset(f,,sizeof(f));
int ans=INF;
f[]=;
for(int i=;i<=num[T];i++)
for(int j=sum[T];j>=w[T][i];j--)
f[j]+=f[j-w[T][i]];
for(int i=;i<=sum[T];i++)
if(f[i])ans=min(max(i,sum[T]-i),ans);
tot+=ans;
}
printf("%d\n",tot);
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
memset(num,,sizeof(num));
memset(sum,,sizeof(sum));
memset(w,,sizeof(w));
memset(f,,sizeof(f));
if(n==&&m==)break;
init();
}
return ;
}

Washing Clothes(poj 3211)的更多相关文章

  1. PKU--3211 Washing Clothes(01背包)

    题目http://poj.org/problem?id=3211 分析:两个人洗衣服,可以同时洗,但是只能同时洗一种颜色. 要时间最短,那么每一种颜色的清洗时间最短. 转换为,两个人洗同一种颜色的衣服 ...

  2. 01背包问题:Charm Bracelet (POJ 3624)(外加一个常数的优化)

    Charm Bracelet    POJ 3624 就是一道典型的01背包问题: #include<iostream> #include<stdio.h> #include& ...

  3. Scout YYF I(POJ 3744)

    Scout YYF I Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5565   Accepted: 1553 Descr ...

  4. 广大暑假训练1(poj 2488) A Knight's Journey 解题报告

    题目链接:http://vjudge.net/contest/view.action?cid=51369#problem/A   (A - Children of the Candy Corn) ht ...

  5. Games:取石子游戏(POJ 1067)

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37662   Accepted: 12594 Descripti ...

  6. BFS 或 同余模定理(poj 1426)

    题目:Find The Multiple 题意:求给出的数的倍数,该倍数是只由 1与 0构成的10进制数. 思路:nonzero multiple  非零倍数  啊. 英语弱到爆炸,理解不了题意... ...

  7. 并查集+关系的传递(poj 1182)

    题目:食物链 题意:给定一些关系.判断关系的正确性,后给出的关系服从之前的关系: 思路:难点不在并查集,在于关系的判断,尤其是子节点与根节点的关系的判断: 这个关系看似没给出,但是给出子节点与父节点的 ...

  8. 昂贵的聘礼(poj 1062)

    Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低 ...

  9. Collecting Bugs(POJ 2096)

    Collecting Bugs Time Limit: 10000MS   Memory Limit: 64000K Total Submissions: 3064   Accepted: 1505 ...

随机推荐

  1. JVM(HotSpot)7种垃圾收集器

    JVM(HotSpot)7种垃圾收集器 7种垃圾收集器作用于不同的分代,如果两个收集器之间存在连续,就说明他们可以搭配使用. 从JDK1.3到现在,从Serial收集器->Parallel收集器 ...

  2. Spring Boot 注册 Servlet 的三种方法,真是太有用了!

    本文栈长教你如何在 Spring Boot 注册 Servlet.Filter.Listener. 你所需具备的基础 什么是 Spring Boot? Spring Boot 核心配置文件详解 Spr ...

  3. CSS进阶:提高你前端水平的 4 个技巧

    译者注:随着 Node.js .react-native 等技术的不断出现,和互联网行业的创业的层出不穷,了解些前端知识,成为全栈攻城师,快速的产出原型,展示你的创意,对程序员,尤其是在创业的程序员来 ...

  4. elasticsearch 2.4在head删除数据(使用Delete By Query插件)

    之所以说明是2.4版,是因为不同版本删除的语法不一样(例如跟5.x就不同) 首先安装Delete By Query插件,方式跟安装head插件差不多,安装命令:plugin install delet ...

  5. Hadoop分布式集群安装

        环境准备     操作系统使用ubuntu-16.04.2 64位 JDK使用jdk1.8 Hadoop使用Hadoop 2.8版本     镜像下载  操作系统     操作系统使用ubun ...

  6. SEO 第二章

    SEO第二章 1.  掌握搜索引擎工作原理(重点) 2.  了解百度算法 3.  关键词的分类 一.什么是搜索引擎? 搜索引擎是用来实现搜索服务的,说白了搜索引擎也属于一种网站. 浏览器是用来加载网站 ...

  7. liunx 修改IP地址

    1.安装centos系统,这里就不详细说明了. 2.进入到 vi /etc/sysconfig/network-scripts/ifcfg-eth0      后面的名称有些可能不同 其中,有些可能没 ...

  8. DROP SCHEMA - 删除一个模式

    SYNOPSIS DROP SCHEMA name [, ...] [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP SCHEMA 从数据库中删除模式. 模式只能被 ...

  9. 搜索 || DFS || UOJ 146 信息传递

    DFS+回溯 找最小环 每个人知道自己的生日,每次把自己知道的生日告诉固定的一个人,问最少多少次之后能从别人口中听到自己的生日 找一个最小环 #include <iostream> #in ...

  10. docker nginx 负载均衡

    index1.html <html> <head> <title>lb-test</title> </head> <body> ...