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个挂 ...
随机推荐
- Sparse Autoencoder(二)
Gradient checking and advanced optimization In this section, we describe a method for numerically ch ...
- Java(标识符,关键字,注释,常量,变量)
标识符 在java程序中有些名字是可以自定义的,那么这些自定义的名字我们就称作为自定义的标识符. 标识符要注意的细节: 标识符的组成元素是由字母(a-zA-Z).数字(0-9).下划线(_).美元符号 ...
- chattr---文件隐藏属性
- Gym - 100502A Amanda Lounges
Amanda Lounges Time Limit: 1000MS Memory Limit: 524288KB 64bit IO Format: %I64d & %I64u AMAN ...
- Oracle数据库安装时 environment variable path 大于 1023
提示的内容如下: 打开系统的环境变量设置, 编辑Path,全选将其中的路径全部复制出来放到文本文档中.新建一个系统变量取名Path_Old_1,剪切Path中的所有变量复制进path1然后保存,将Pa ...
- Python - 字典(dict)删除元素
字典(dict)删除元素, 能够选择两种方式, dict.pop(key)和del dict[key]. 代码 # -*- coding: utf-8 -*- def remove_key(d, ke ...
- 任务调度(四)——ScheduledExecutorService替代Timer,实现多线程任务调度
上篇博文<任务调度(三)--Timer的替代品ScheduledExecutorService简介>已经对ScheduledExecutorService做了简介.事实上使用Schedul ...
- ubuntu-查看iso文件的md5
直接使用命令md5sum +文件名就可以了.例如 md5sum ~/YLMF_GHOSTWIN7SP1_X86_YN2015.iso 执行结果如下 cdbb7fdc8bbc30e5e0a398f71b ...
- List-ArrayList 使用
今天优化一段代码,如下 int num = 0; boolean skipAppend = false; int types_ext1[] = new int[] { ModuleType.TYPE_ ...
- Android学习笔记之详细讲解画圆角图片
package xiaosi.RoundConcer; import android.app.Activity; import android.graphics.Bitmap; import andr ...