日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单01背包 POJ3211 Washing Clothes 多种衣服分别dp

發(fā)布時(shí)間:2025/6/17 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单01背包 POJ3211 Washing Clothes 多种衣服分别dp 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目連接:http://poj.org/problem?id=3211

大意就是 一個(gè)人洗衣服,然后找他媳婦幫忙。有n種顏色的衣服,和m件衣服,每件衣服的顏色和洗出來的時(shí)間都會(huì)給出來。再洗的時(shí)候兩個(gè)人不能同時(shí)洗一件衣服,但是可以洗兩件衣服,但是不同種顏色的衣服不能同時(shí)洗~讓你求所需要的最少時(shí)間。

這樣我們就可以知道,這道題就是對(duì)每一種顏色的衣服所需要的時(shí)間進(jìn)行dP就OK了,對(duì)每一種顏色的衣服DP就相當(dāng)于給你幾個(gè)正數(shù)讓你把他分的盡量平均,也就是把和加起來然后除以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++)//對(duì)每一種進(jìn)行DPfor(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];//必須讓兩個(gè)人里邊用時(shí)最多的加到sum里面去,因?yàn)樽疃嗟哪莻€(gè)才是他們的時(shí)間 }printf("%d\n",sum);}return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/0803yijia/archive/2012/08/14/2637284.html

總結(jié)

以上是生活随笔為你收集整理的简单01背包 POJ3211 Washing Clothes 多种衣服分别dp的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。