博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3211 Washing Clothes(01背包)
阅读量:4072 次
发布时间:2019-05-25

本文共 964 字,大约阅读时间需要 3 分钟。

链接:

题目大意:

Dearboy和他的女朋友一起洗m件衣服,共有n总颜色(每件衣服只有一种颜色)。 为了放置不同颜色互染,每次只能洗一种颜色的衣服,在这件衣服洗完之前不能洗另外一种衣服。 Dearboy和他女朋友可以同时一起洗衣服,但是不能同时洗同一件衣服,也不能同时洗不同种颜色的衣服。 

一只每件衣服所需时间,问最少花费多少时间可以全部洗完。

分析:

首先可以很直观的判定,一定是把一种颜色的所有衣服都洗完再接着洗另外一种颜色的衣服,洗每种颜色所有衣服的总时间是分开独立的。

关键是洗同一种颜色的衣服时,Dearboy和他的女朋友怎样分配任务才可以最快完成?  最理想的情况时,两人各洗一半的时间。 所以,我们要尽量分配给两人的任务时长接近总时长的一半,最后洗完单种颜色的衣服所花的时间,取决于时长较大的那个。

很明显的可以用01背包来做,每件衣服的时间是容量也是价值,总时间的一半为背包的容量,然后01背包。

代码:

#include
#include
#include
#include
#include
#include
#include
#define MP make_pair#define SQ(x) ((x)*(x))using namespace std;typedef long long int64;const int MAXN = 110;const int INF = 0x3f3f3f3f;int n, m;int h[25];int w[12][MAXN], sum[12], num[12];int f[MAXN*1000];int main(){ char color[12]; int t; while(~scanf("%d%d", &n, &m) && n+m){ map
mp; for(int i=0; i
>1); v>=w[k][i]; --v) f[v] = max(f[v], f[v-w[k][i]]+w[k][i]); } ans += sum[k]-f[sum[k]>>1]; } printf("%d\n",ans); } return 0;}

转载地址:http://mpzni.baihongyu.com/

你可能感兴趣的文章
flex4 s:Datagrid <s:typicalItem
查看>>
传奇的通迅协议与base64算法
查看>>
判断线段和矩形是否相交
查看>>
[AIR] as3 之条件编译多平台妙用
查看>>
FLEX的动画
查看>>
REST架构
查看>>
c# winforms TextBox的记忆功能
查看>>
游戏开发 人物部分透明
查看>>
升级Flash Builder 4.6中的Flash Player版本
查看>>
等角投影及计算公式
查看>>
Flex(flash)检测摄像头的3种状态(是否被占用,没安装摄像头,正常)
查看>>
对RTMP视频流进行BitmapData.draw()出错的解决办法
查看>>
多年前写的一个ASP.NET网站管理系统,到现在有些公司在用
查看>>
FMS 客户端带宽计算、带宽限制
查看>>
在线视频聊天(客服)系统开发那点事儿
查看>>
语法解析器!
查看>>
SecurityError Error 2148 SWF 不能访问本地资源
查看>>
Flex4的可视化显示对象
查看>>
足球防守技巧
查看>>
as3的操作符重载
查看>>