zoukankan      html  css  js  c++  java
  • 简单01背包 POJ3211 Washing Clothes 多种衣服分别dp

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

    大意就是 一个人洗衣服,然后找他媳妇帮忙。有n种颜色的衣服,和m件衣服,每件衣服的颜色和洗出来的时间都会给出来。再洗的时候两个人不能同时洗一件衣服,但是可以洗两件衣服,但是不同种颜色的衣服不能同时洗~让你求所需要的最少时间。

    这样我们就可以知道,这道题就是对每一种颜色的衣服所需要的时间进行dP就OK了,对每一种颜色的衣服DP就相当于给你几个正数让你把他分的尽量平均,也就是把和加起来然后除以2作为背包容量~

    代码:

    #include <stdio.h>
    #include <string.h>
    
    struct node
    {
        char color[20];
        int sum;
        int a[105];
        int count;//记录有多少见这种颜色的衣服。
    }col[15];
    int count;
    int search(char s[],int m)
    {
        int i;
        for(i = 0;i < m;i++)
        if(strcmp(s,col[i].color) == 0)
        return i;
    
        return 0;
    }
    int main()
    {
        char str[15];
        int m,n,i,j,a,k;
        int f[2000];
        while(scanf("%d %d",&m,&n) && n||m)
        {
            count = 0;
            for(i = 0;i < m;i++)
            {
                scanf("%s",col[i].color);
                col[i].sum = 0;
                col[i].count = 0;
            }
            for(i = 0;i < n;i++)
            {
                scanf("%d %s",&a,str);
                int leap;
                leap = search(str,m);
                int tag;
                tag = col[leap].count;
                col[leap].a[tag] = a;
                col[leap].sum += a;
                col[leap].count++;
    
            }
    
            int sum = 0;
            for(i = 0;i < m;i++)
            {
                memset(f,0,sizeof(f));
                int v = col[i].sum/2;
                for(j = 0;j < col[i].count;j++)//对每一种进行DP
                for(k = v;k >= col[i].a[j];k--)
                if(f[k] < f[k-col[i].a[j]]+col[i].a[j])
                f[k] = f[k-col[i].a[j]]+col[i].a[j];
    
    
                sum += col[i].sum-f[v];//必须让两个人里边用时最多的加到sum里面去,因为最多的那个才是他们的时间
            }
            printf("%d\n",sum);
    
        }
        return 0;
    }
  • 相关阅读:
    利用ssh的私钥登录Linux server
    PSR-2 代码风格规范
    MySQL的四种事务隔离级别
    table添加横向滚动条
    转换图片大小
    百度地图Label 样式:label.setStyle
    鼠标的几种常用样式
    百度地图API-自定义图标覆盖物
    微信公众号自定义菜单中可加入的表情
    微信公众号项目总结
  • 原文地址:https://www.cnblogs.com/0803yijia/p/2637284.html
Copyright © 2011-2022 走看看