POJ 3211 Washing Clothes 0-1背包
题目大意:
xxx很懒,但他有个漂亮又勤奋的女友 (尼玛能不能不刺激我,刚看到这题的时候发现自己的衣服没洗!!!) 可以帮他洗衣服。
洗衣服的时候要求不同的颜色的衣服不能同时洗。一人洗一件的话,问最短的时间。
对每个颜色的衣服进行划分,最后求和,就转化为若干个0-1背包问题。
对于每种颜色:因为两个人同时洗,但不能一起洗一件,故时间必为长的那个。
所以若时间接近一半,则为最优解。这样背包的容量为sum[i] /2 ,sum[i]为该组颜色衣服时间和
f[k]=max( f[k],f[k-a[i][j]]+a[i][j] );
因为现在是不超过t/2时间的,故等下的每组的答案是sum[i] -f[ sum[i] / 2 ]
PS:
别忘了每组都要初始化一次f函数,QAQ傻了,没初始化结果一直WA
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=10000+10;
char kind[11][15],temp[15];
int a[11][105],num[11],sum[11];
int N,M,t;
int f[MAXN]; int index(char *s)
{
int i;
for( i=0;i<M;i++)
if(strcmp(s,kind[i])==0)
return i;
} int main()
{
while(scanf("%d%d",&M,&N),M||N)
{
int ans=0;
memset(kind,0,sizeof(kind));
memset(a,0,sizeof(a));
memset(num,0,sizeof(num));
memset(sum,0,sizeof(sum)); for(int i=0;i<M;i++)
scanf("%s",kind[i]); for(int i=0;i<N;i++)
{
scanf("%d%s",&t,temp);
int id=index(temp);
a[id][ ++num[id] ]=t;
sum[id]+=t;
} for(int i=0;i<M;i++)
{
memset(f,0,sizeof(f));
for(int j=1;j<=num[i];j++)
{
for(int k=sum[i]/2;k>=a[i][j];k--)
{
f[k]=max(f[k],f[k-a[i][j]]+a[i][j] );
}
}
ans =ans+ sum[i] -f[ sum[i] / 2 ];
} printf("%d\n",ans);
}
}
POJ 3211 Washing Clothes 0-1背包的更多相关文章
- POJ 3211 Washing Clothes【01背包】
题意:给出n种颜色,m件衣服,再分别给出m件衣服的颜色,和洗所需要的时间,dearboy和他的妹子一起洗衣服,且同种颜色的衣服不能同时洗,也不能两个人同时洗一件衣服,问洗完这m件衣服至少需要的时间 先 ...
- POJ 3211 Washing Clothes(01背包)
POJ 3211 Washing Clothes(01背包) http://poj.org/problem?id=3211 题意: 有m (1~10)种不同颜色的衣服总共n (1~100)件.Dear ...
- poj 3211 Washing Clothes(背包)
很不错的01背包!!! 不过有点疑问!!!(注释) #include <algorithm> #include<stdio.h> #include<string.h> ...
- POJ 3211 Washing Clothes 背包题解
本题是背包问题,可是须要转化成背包的. 由于是两个人洗衣服,那么就是说一个人仅仅须要洗一半就能够了,由于不能两个人同一时候洗一件衣服,所以就成了01背包问题了. 思路: 1 计算洗完同一颜色的衣服须要 ...
- [POJ 3211] Washing Clothes (动态规划)
题目链接:http://poj.org/problem?id=3211 题意:有M件衣服,每种衣服有一种颜色,一共有N种颜色.现在两个人洗衣服,规则是必须把这一种颜色的衣服全部洗完才能去洗下一种颜色的 ...
- poj 3211 Washing Clothes
// 题意 :夫妻两洗衣服,衣服有m种颜色,每种颜色又有若干件,每件衣服洗完需要特定的时间,要求每种颜色放在一起洗,洗完才能洗其他衣服.最后问洗完需要的最少时间// 将衣服按颜色分类 然后求出每种颜色 ...
- POJ 3211 Washing Cloths(01背包变形)
Q: 01背包最后返回什么 dp[v], v 是多少? A: 普通01背包需要遍历, 从大到小. 但此题因为物品的总重量必定大于背包容量, 所以直接返回 dp[V] 即可 update 2014年3月 ...
- PKU--3211 Washing Clothes(01背包)
题目http://poj.org/problem?id=3211 分析:两个人洗衣服,可以同时洗,但是只能同时洗一种颜色. 要时间最短,那么每一种颜色的清洗时间最短. 转换为,两个人洗同一种颜色的衣服 ...
- poj 1837 Balance (0 1 背包)
Balance Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10326 Accepted: 6393 题意:给你n个挂 ...
随机推荐
- ie中 专有的注释
http://www.cnblogs.com/liluping860122/p/3539165.html
- JQ 实施编辑 (clone()复制行||双击编辑)
//代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- 「HAOI2018」字串覆盖
「HAOI2018」字串覆盖 题意: 给你两个字符串,长度都为\(N\),以及一个参数\(K\),有\(M\)个询问,每次给你一个\(B\)串的一个子串,问用这个字串去覆盖\(A\)串一段区间的最 ...
- 欧拉回路&欧拉路径学习笔记
基础性质(用来判定): 1.无向图欧拉回路没有奇数点 (有向图所有点入度等于出度) 2.无向图欧拉路径只有两个奇数点 (有向图有一个顶点入度比出度大1,有一个顶点出度比入度大1,其他的全相等) 3.图 ...
- python2 pip安装包等出现各种编码错误UnicodeDecodeError: 'ascii'(/或者utf-8) codec can't decode byte 0xd2...
1.问题描述: python2环境,pip安装包时报错UnicodeDecodeError: 'ascii'(/或者utf-8) codec can't decode byte 0xd2... 类似如 ...
- 海康威视抓拍一体机--- C#源码
https://pan.baidu.com/s/1kV4AjRp 需要的联系qq:694666781
- 【试水CAS-4.0.3】第07节_CASclient配置单点登录
完整版见https://jadyer.github.io/2015/07/26/sso-cas-client-login/ 本文源代码下载:http://download.csdn.net/detai ...
- [LuoguP4892]GodFly的寻宝之旅 状压DP
链接 基础状压DP,预处理出sum,按照题意模拟即可 复杂度 \(O(n^22^n)\) #include<bits/stdc++.h> #define REP(i,a,b) for(in ...
- android图片特效处理之怀旧效果
图片特效处理系列将介绍图片的像素点的特效处理,这些物资注重的是原理.也就是说只要你知道这些算法不管是C++,VB,C#,Java都可以做出相同的特效.下面将介绍图片怀旧效果的算法.算法如下: 上面公式 ...
- BZOJ5394: [Ynoi2016]炸脖龙(欧拉广义降幂)
就是让你求这个: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5394 解题思路: NOIP2018后第一道题,感觉非常像那个上帝与集合的 ...