大体题意:有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. lock和synchronized的同步区别与选择

    1. lock是一个接口,而synchronized是java的一个关键字,synchronized是内置的语言实现:(具体实现上的区别在<Java虚拟机>中有讲解底层的CAS不同,以前有 ...

  2. EditText输入手机号自动带空格

    xml: <EditText android:id="@+id/edit_main" android:layout_width="match_parent" ...

  3. TFS2010升级至TFS2013完全指南(更换服务器)

    一.背景:         公司已使用tfs2010很长时间,目前随着公司的发展,项目越来越少,而产品越来越多,采用的开发模式,也逐渐从瀑布式.迭代式转向敏捷开发.为了更好的支持产品研发,决定将tfs ...

  4. [Python學習筆記] 使用xlwings 插入註解 (forked 版本)

    到今天為止 xlwings 還沒有插入註解的功能 去原始開發者的 Github Pull Requests 他說之前有人有建議要加入這個功能 但他還沒更新~ 如果需要使用 Python 來插入註解的話 ...

  5. ldap_modify: No such object (32) matched DN: cn=config

    centos 6.9 部署 kerbors ldap 报错 [root@hadoop data]# ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ld ...

  6. HTTP隧道代理

    reGeorg的前身是2008年SensePost在BlackHat USA 2008 的 reDuh延伸与扩展.也是目 前安全从业人员使用最多,范围最广,支持多丰富的一款http隧道.从本质上讲,可 ...

  7. Redux 和 mobx的区别

    Redux: Redux将数据保存在单一store中,Mobx将数据保存在分散的多个store中 Redux需要手动处理变化后的操作,Mobx使用observable保存数据,数据变化后自动处理响应的 ...

  8. Qt _六天的学习路线

    六天的学习路线:第一天:    1.Qt的介绍    2.Qt的框架    3.项目文件(.pro)    4.第一个Qt程序(hello Qt)    5.父窗口和子窗口的区别(控件,部件,构件)  ...

  9. Spring-1-IOC

    IOC与DI的区别? IOC:控制反转(Inversion of Control是面向对象的一种设计原则,可以用来降低计算机之间的耦合度,其中最常见的是依赖注入).是实现的目标 DI:是实现IOC的一 ...

  10. ios之AFN

    https://github.com/AFNetworking/AFNetworking 与asi-http-request功能类似的网络库,不过是基于NSURLConnection 和 NSOper ...