题目链接:

这个题目比1711难处理的是字符串怎样处理,所以我们要想办法,自然而然就要想到用结构体存储。所以最后将全部的衣服分组,然后将每组时间减半,看最多能装多少。最后求最大值。那么就非常愉快的转化成了一个01背包问题了。。。

。

hdu1711是说两个得到的价值要尽可能的相等。所以还是把全部的价值分为两半。最后01背包,那么这个问题就得到了解决。。

题目:

Washing Clothes
Time Limit: 1000MS   Memory Limit: 131072K
Total Submissions: 8637   Accepted: 2718

Description

Dearboy was so busy recently that now he has piles of clothes to wash. Luckily, he has a beautiful and hard-working girlfriend to help him. The clothes are in varieties of colors but each piece of them can be seen as of only one color. In order to prevent
the clothes from getting dyed in mixed colors, Dearboy and his girlfriend have to finish washing all clothes of one color before going on to those of another color.

From experience Dearboy knows how long each piece of clothes takes one person to wash. Each piece will be washed by either Dearboy or his girlfriend but not both of them. The couple can wash two pieces simultaneously. What is the shortest possible time they
need to finish the job?

Input

The input contains several test cases. Each test case begins with a line of two positive integers M and N (M < 10, N < 100), which are the numbers of colors and of clothes. The next line contains Mstrings which
are not longer than 10 characters and do not contain spaces, which the names of the colors. Then follow N lines describing the clothes. Each of these lines contains the time to wash some piece of the clothes (less than 1,000) and its color. Two zeroes
follow the last test case.

Output

For each test case output on a separate line the time the couple needs for washing.

Sample Input

3 4
red blue yellow
2 red
3 blue
4 blue
6 red
0 0

Sample Output

10

Source

代码为:

#include<cstdio>
#include<map>
#include<iostream>
#include<cstring>
using namespace std; const int maxn=100000+10;
int dp[maxn]; struct clothes
{
int num;//颜色同样的衣服的编号
int sum;//颜色形同的衣服的总数
char color[100];//颜色
int time[105];//颜色同样的不同衣服的时间
}clo[10+10]; int main()
{
int m,n,u,max_pack,ans;
char str[100+10];
while(~scanf("%d%d",&m,&n))
{
if(n==0&&m==0) return 0;
for(int i=1;i<=m;i++)
{
scanf("%s",clo[i].color);
clo[i].num=1;
clo[i].sum=0;
}
for(int i=1;i<=n;i++)
{
scanf("%d%s",&u,str);
for(int j=1;j<=m;j++)
{
if(strcmp(str,clo[j].color)==0)
{
int tmp=clo[j].num;
clo[j].time[tmp]=u;
clo[j].sum=clo[j].sum+u;
clo[j].num++;
}
}
}
for(int i=1;i<=m;i++)
clo[i].num--;
ans=0;
for(int i=1;i<=m;i++)
{
memset(dp,0,sizeof(dp));
max_pack=clo[i].sum/2;
for(int j=1;j<=clo[i].num;j++)
for(int k=max_pack;k>=clo[i].time[j];k--)
dp[k]=max(dp[k],dp[k-clo[i].time[j]]+clo[i].time[j]);
ans=ans+max(dp[max_pack],clo[i].sum-dp[max_pack]);
}
cout<<ans<<endl;
}
return 0;
}

hdu1171 题目:

Big Event in HDU

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 23302    Accepted Submission(s): 8206

Problem Description
Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don't know that Computer College had ever been split into Computer College and Software College in 2002.

The splitting is absolutely a big event in HDU! At the same time, it is a trouble thing too. All facilities must go halves. First, all facilities are assessed, and two facilities are thought to be same if they have the same value. It is assumed that there is
N (0<N<1000) kinds of facilities (different value, different kinds).
 
Input
Input contains multiple test cases. Each test case starts with a number N (0 < N <= 50 -- the total number of different facilities). The next N lines contain an integer V (0<V<=50 --value of facility) and an integer M (0<M<=100 --corresponding number of the
facilities) each. You can assume that all V are different.

A test case starting with a negative integer terminates input and this test case is not to be processed.
 
Output
For each case, print one line containing two integers A and B which denote the value of Computer College and Software College will get respectively. A and B should be as equal as possible. At the same time, you should guarantee that A is not less than B.
 
Sample Input
2
10 1
20 1
3
10 1
20 2
30 1
-1
 
Sample Output
20 10
40 40
 
Author
lcy
 
Recommend
We have carefully selected several similar problems for you:  2159 2955 1087 1069 1231 
 

代码为

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int maxn=250000+10;
int dp[maxn]; int sum[50+10],val[50+10];
int kind[5000+10]; int main()
{
int n,max_pack,ans,cal,Max;
while(~scanf("%d",&n))
{
memset(dp,0,sizeof(dp));
if(n<=0) return 0;
cal=1;
max_pack=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&val[i],&sum[i]);
max_pack+=sum[i]*val[i];
for(int j=1;j<=sum[i];j++)
{
kind[cal]=val[i];
cal++;
}
}
cal--;
Max=max_pack/2;
for(int i=1;i<=cal;i++)
for(int j=Max;j>=kind[i];j--)
dp[j]=max(dp[j],dp[j-kind[i]]+kind[i]);
ans=max(dp[Max],max_pack-dp[Max]);
cout<<ans<<" "<<max_pack-ans<<endl;
}
return 0;
}

poj3211Washing Clothes(字符串处理+01背包) hdu1171Big Event in HDU(01背包)的更多相关文章

  1. hdu1171Big Event in HDU(01背包)

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  2. hdu 1171 Big Event in HDU (01背包, 母函数)

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  3. HUD 1171 Big Event in HDU(01背包)

    Big Event in HDU Problem Description Nowadays, we all know that Computer College is the biggest depa ...

  4. HDU1171--Big Event in HDU(多重背包)

    Big Event in HDU   Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...

  5. HDU 1171 Big Event in HDU 多重背包二进制优化

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1171 Big Event in HDU Time Limit: 10000/5000 MS (Jav ...

  6. HDU1171-Big Event in HDU

    描述: Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don ...

  7. HDU 1171 Big Event in HDU dp背包

    Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s ...

  8. HDU - 1171 Big Event in HDU 多重背包

    B - Big Event in HDU Nowadays, we all know that Computer College is the biggest department in HDU. B ...

  9. HDU 1171 Big Event in HDU (多重背包变形)

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

随机推荐

  1. laravel jwt 做API 退出登录(注销) 该怎么弄? 如何让token失效

    laravel jwt 做API 退出登录(注销) 该怎么弄? 如何让token失效 php框架 laravel 2.1k 次浏览 问题对人有帮助,内容完整,我也想知道答案0问题没有实际价值,缺少关键 ...

  2. zabbix基础安装

    环境依赖:LNMP或者LAMP 简介参考:http://blog.51cto.com/zhang789/1868880 一.准备 我安装的环境及其版本如下: 系统版本 CentOS Linux rel ...

  3. CE工具里自带的学习工具--第五关

    图解: 此时会弹出一个对话框,选择是就可以了,最终会看到:

  4. du查看文件大小

    du+文件名就可以查看文件大小 du+ -h + 文件名也是查看文件大小,只是-h会将文件大小转换成M,G等格式

  5. sql server使用的注意点及优化点 自备

    1.字符类型建议采用varchar/nvarchar数据类型,并且禁止使用varchar(max).nvarchar(max) 2.金额货币建议采用money数据类型  (*) 3.自增长标识建议采用 ...

  6. php实现短信验证

    PHP实现短信验证的整体思路: 一.申请短信api ->申请网址https://s1.chanyoo.cn/login?url=%2f 二.编写核心代码(thinkPHP5) 示例: <? ...

  7. 零基础入门学习Python(35)--图形用户界面入门:EasyGui

    知识点 EasyGui学习文档[超详细中文版] 1. 建议不要在IDLE上运行EasyGui EasyGui是运行在TKinter上并拥有自身的事件循环,而IDLE也是Tkinter写的一个应用程序并 ...

  8. 每日命令:(12)sar

    sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告, 包括:文件的读写情况.系统调用的使用 ...

  9. Variational Auto-Encoders原理

    目录 AE v.s. VAE Generative model VAE v.s. GAN AE v.s. VAE Generative model VAE v.s. GAN

  10. Vue如何使用vue-awesome-swiper实现轮播效果

    在Vue项目中如何实现轮播图的效果呢,在传统项目中第一个想到的一般都是swiper插件,代码简单好用.一开始我也是直接npm安装swiper然后照着之前的传统写法写,然而却没有效果,只会显示图片但没有 ...