码迷,mamicode.com
首页 > 其他好文 > 详细

[POJ 3211] Washing Clothes (动态规划)

时间:2014-10-27 19:20:47      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   ar   java   for   sp   div   

题目链接:http://poj.org/problem?id=3211

题意:有M件衣服,每种衣服有一种颜色,一共有N种颜色。现在两个人洗衣服,规则是必须把这一种颜色的衣服全部洗完才能去洗下一种颜色的衣服。

问:在两个人可以同时洗衣服的情况下,把衣服全部洗完最少需要多久。

 

如果说两个人同时洗同一种颜色衣服,那么最少的时间就是洗完该颜色衣服的总时间的一半。

那么我们可以将洗每种衣服分开来看,视作一个01背包,容量是洗该颜色衣服的总时间的一半。

然后最多花多久。那么该颜色的总时间-这个人花的最多时间就是另一个洗这种颜色衣服的时间。

最后求最大的。

 

代码:

 1 import java.util.*;
 2 
 3 public class Main{
 4     static HashMap<String,Integer> hs;
 5     public static void main(String[] args){
 6         Scanner cin = new Scanner(System.in);
 7         while( true ){
 8             int N = cin.nextInt();
 9             int M = cin.nextInt();
10             
11             if( N==0&&M==0 ) break;
12             
13             int c[][] = new int[N+1][M+1];
14             
15             hs = new HashMap<String,Integer>();
16             
17             for(int i=1;i<=N;i++){
18                 String s = cin.next();
19                 hs.put(s, i);
20             }
21             
22             int sum[] = new int[N+1];
23             
24             int sumn = 0;
25             
26             for(int i=1;i<=M;i++){
27                 int ta = cin.nextInt();
28                 String tb = cin.next();
29                 int x = hs.get(tb);
30                 c[x][++c[x][0]] = ta;
31                 sum[x] += ta;
32                 sumn += ta;
33             }
34             
35             int dp[][] = new int[N+1][sumn+100];
36             int ans = 0;
37             for(int i=1;i<=N;i++){
38                 for(int k=1;k<=c[i][0];k++){
39                     for(int j=sum[i]/2;j>=c[i][k];j--){
40                         if( j>=c[i][k] )
41                             dp[i][j] = Math.max(dp[i][j],dp[i][j-c[i][k]]+c[i][k]);
42                     }
43                 }
44                 ans += dp[i][sum[i]/2];
45             }
46             
47             System.out.println(Math.max(ans,sumn-ans));        
48             
49         }
50     }
51 }

 

[POJ 3211] Washing Clothes (动态规划)

标签:style   blog   http   color   ar   java   for   sp   div   

原文地址:http://www.cnblogs.com/llkpersonal/p/4054713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!