• poj 3211 Washing Clothes


    // 题意 :夫妻两洗衣服,衣服有m种颜色,每种颜色又有若干件,每件衣服洗完需要特定的时间,要求每种颜色放在一起洗,洗完才能洗其他衣服。最后问洗完需要的最少时间
    // 将衣服按颜色分类 然后求出每种颜色衣服需要的最少时间,然后累加
    // 求每种颜色衣服的最少时间就是把洗衣服的时间尽量分成靠近的两部分 就用总时间的一半作为背包的容量 ,然后求该容量的最大值 每件的空间消耗和价值看成是一样的
    // 然后就是 0-1背包了
    #include <iostream> #include <algorithm> #include <queue> #include <math.h> #include <stdio.h> #include <string.h> using namespace std; #define MOD 1000000007 #define maxn 100010 char str[20][20]; int dp[maxn]; char ch[20]; int num[20]; int sum[20]; int t; int M,N; int ar[20][100]; int fun(){ for(int i=1;i<=M;i++) if(strcmp(ch,str[i])==0) return i; return 0; } int main() { while(scanf("%d %d",&M,&N),M|N){ int i,j,k; for(i=1;i<=M;i++) scanf("%s",str[i]),num[i]=sum[i]=0;//,printf("%s",str[i]); for(i=1;i<=N;i++){ scanf("%d %s",&t,ch);//,printf("%s",ch); k=fun(); sum[k]+=t; ar[k][num[k]++]=t; } int L,ans=0; for(i=1;i<=M;i++){ L=sum[i]/2; for(j=0;j<=L;j++) dp[j]=0; for(j=0;j<num[i];j++) for(k=L;k>=ar[i][j];k--) dp[k]=max(dp[k],dp[k-ar[i][j]]+ar[i][j]); ans+=max(sum[i]-dp[L],dp[L]); } printf("%d ",ans); } return 0; }
  • 相关阅读:
    C#面试题
    深入浅出JSONP--解决ajax跨域问题
    vs切换当前编辑文件时自动定位目录树
    测试从应用到DB的准确的网络延迟
    MySQL死锁检测和回滚
    [磁盘空间]lsof处理文件恢复、句柄以及空间释放问题
    [硬件知识]OP(Over-provisioning)预留空间
    查看实例上面无主键的表
    mysql replace语句
    理解innodb buffer pool
  • 原文地址:https://www.cnblogs.com/372465774y/p/3190516.html
Copyright © 2020-2023  润新知