- 浏览: 203689 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (137)
- c++ (74)
- c++,算法,回溯 (2)
- DP问题。 (9)
- DP问题,0/1背包问题 (3)
- 数学问题 (6)
- 贪心算法 (10)
- 排序 (16)
- 数据结构 (7)
- 容器 (2)
- 模拟问题 (2)
- 水题 (8)
- 并查集 (3)
- 非技术 (2)
- 素数问题 (1)
- DFS (3)
- 二叉树 (1)
- 递归 (1)
- 图论 (5)
- 最小生成树 (5)
- 最短路径 (6)
- bell_flaod算法 (2)
- hash (3)
- 二分查找 (1)
- 搜索 (5)
- BFS (5)
- STL (3)
- 字符串hash (1)
- 拓扑排序 (1)
- 字典树 (4)
- 哈弗曼树 (1)
- KMP (7)
- 线段树 (9)
- 树状数组 (6)
- 全排列 (2)
- DP问题 (2)
- LCS (1)
- 最长不下降子序列 (2)
- 面试经验 (3)
题意:有m (1~10)种不同颜色的衣服总共n (1~100)件,Dearboy和她的girlfriend两个人要一起洗完全部衣服,为了预防色彩混合,他们不能同时洗不同颜色的衣服,给出洗完每件衣服所需的时间cloth[i].tim和它的颜色cloth[i].col,求出Dearboy和她的girlfriend最少用多少时间能洗完全部衣服。 思路:01背包,由于各种颜色互相独立,故把每种颜色都化为一个01背包,求出洗完每种颜色衣服的最短时间,它们的总和即为答案。首先按颜色对衣服进行归类,即将相同颜色的衣服放在同一类中
代码如下:
对于某一种颜色的所有衣服所需要的最少时间,相当于将这堆衣服按时间分为两推,使得这两堆衣服所需要的时间尽可能的接近。对于每堆衣服建模: 假设当前这堆衣服一个人洗的时间为sum, 令mid = sum/2;
问题转化为,(1)有背包容量为mid,现在要从这堆衣服中选取衣服,使得总容量尽可能接近于mid
继续转化..(2)背包容量为mid,某件衣服的重量为wi,价值也为wi,计算所能达到的最大价值 dp[mid],
那么问题(2)中的dp[mid]相当于问题(1)中最接近于mid的那个容量,故原问题中这堆衣服所需要的实际时间为sum - dp[mid];#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
const int M=10;
const int N=100;
char color[M][N];
vector<int>cost[M];
int dp[100002];
int Max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int n,m;
while (scanf("%d%d",&m,&n)!=EOF)
{
if(m==0&&n==0)
break;
int i,j;
for (i=0;i<m;i++)
{
cin>>color[i];
cost[i].clear();
}
while (n--)
{
char col[N];
int time;
cin>>time>>col;
for (i=0;i<m;i++)
if(strcmp(color[i],col)==0)
break;
if(i<m)
{
cost[i].push_back(time);
}
}
int ans=0;
for (i=0;i<m;i++)
{
memset(dp,0,sizeof(dp));
int sz=cost[i].size();
int k,mid,sum=0;
for (j=0;j<sz;j++)
sum+=cost[i][j];
mid=sum/2;
for (j=0;j<sz;j++)
{
for (k=mid;k>=cost[i][j];k--)
{
dp[k]=Max(dp[k],dp[k-cost[i][j]]+cost[i][j]);
}
}
ans=ans+sum-dp[mid];
}
cout<<ans<<endl;
}
return 0;
}
发表评论
-
虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承
2013-08-29 14:34 851虚函数:虚函数是C++中用于实现多态(polymorphis ... -
排序算法总结
2013-05-17 11:00 852选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, ... -
poj 3122
2012-12-11 19:51 880题意:作者要开一个生日party,他现在拥有n块高度都为1 ... -
poj 3273
2012-12-11 16:49 997题意:给你天数n,和每天需要花的钱,让你把这些天分成m份(每份 ... -
字典树学习材料
2012-05-30 14:29 978字典树,又称单词查找树,Trie树,是一种树形结构,典型应 ... -
poj 1159
2012-05-28 19:08 1458题目大意:给你一段字符串,让你求出在中间最少加入几个字符 ... -
poj 3176
2012-05-28 14:47 1035大致题意: 输入一个n层的三角形,第i层有i个数,求从第 ... -
poj 1260
2012-05-28 09:54 1623题意解释: 有n个等级的珠宝,等级依次升高,等级越高价钱越高 ... -
poj 1836
2012-05-28 09:22 2728是POJ2533的扩展题。题意不难,令到原队列 ... -
poj 2533
2012-05-26 15:36 1286在做这道题目之前,首先让我们了解一下什么是LIS算法,LIS俗 ... -
poj 3267
2012-05-26 09:43 817从程序可以看出,第i个位置到L所删除的字符数,总是先取最坏情况 ... -
poj 1276
2012-05-25 16:20 2417题意: 这道题的意思是给你一堆钱,各种面值的都有,比 ... -
poj 1094
2012-05-25 13:54 1120题意:给出字母个数,和有限个有序对(a<b)求出能确定字 ... -
poj 3393
2012-05-23 17:00 1268大致题意: 科普文一篇,文章80%都是无用信息,因为 ... -
poj 3007
2012-05-14 10:21 1000大致题意: 给定一个字符串,从任意位置把它切为两半, ... -
poj 3096
2012-05-10 21:09 1026题意: 定义D-pairs表示取字符串s中相距为D的两个字母 ... -
poj 1426
2012-04-26 20:11 2179大致题意: 给出一个整数n,(1 <= n <= ... -
poj 1797
2012-04-24 15:05 1634题目大意是就是何处一个图,n个顶点和m条边,每个边都有最大承载 ... -
poj 1338
2012-04-23 10:20 1268题意:题目意思是求由2,3,5的乘积组成的数从大到小排列,从1 ... -
poj 2021
2012-04-19 15:00 961题意:Ted今年100岁,给出n对他家族的关系:“父 ...
相关推荐
在给出的文件列表中,“POJ1014-Dividing【多重背包+二进制优化】.cpp”和“POJ1014-Dividing【DFS】.cpp”很可能是两份不同的C++代码实现,分别展示了如何结合多重背包和二进制优化以及如何利用DFS来解决问题。...
晒代码之二——多重背包(POJ1276)
* 背包问题:背包问题是指解决问题的背包问题算法,如 poj1837、poj1276。 * 型如下表的简单 DP:型如下表的简单 DP 是指解决问题的简单 DP 算法,如 poj3267、poj1836、poj1260、poj2533。 * 计算几何学:计算几何...
3. **贪心算法**:通过局部最优选择来达到全局最优解的方法,如背包问题(poj3295)。 4. **动态规划**:通过分解问题为更小的子问题来解决复杂问题,如斐波那契数列(poj1068, poj2632, poj1573, poj2993, poj2996...
POJ上的一道题目,自己写的代码,因为想下载别人的, 所以就放上了。
### ACM新手刷题攻略之POJ 在ACM竞赛领域,特别是对于初学者而言,选择合适的平台进行训练至关重要。POJ(Peking University Online Judge)作为国内最早且最知名的在线评测系统之一,拥有丰富的题库资源,对于提高...
* 背包问题:例如 poj1837、poj1276。 * 类型 DP:例如 poj3267、poj1836、poj1260、poj2533。 中级 1. 基本算法: * C++的标准模版库的应用:例如 poj3096、poj3007。 * 较为复杂的模拟题的训练:例如 poj...
例如,poj1328和poj2109就是典型的贪心问题。贪心算法的关键在于正确性证明,确保每一步的局部最优能够导向全局最优。 #### 分治法与递归 分治法是将大问题分解成若干个子问题,递归地求解这些子问题,然后将子问题...
- 背包问题:如`poj1837, poj1276`。 - 简单DP:如`poj3267, poj1836`。 - **数学** - 组合数学:如`POJ3252, poj1850`。 - 数论:如`poj2635, poj3292`。 #### 第二阶段中级训练计划 #### 第3周至第4周(共...
动态规划 01背包问题 POJ3624可以AC
- (poj3267, poj1836, poj1260, poj2533):零一背包、完全背包等问题的解决方案。 3. **二维动态规划**: - (poj3176, poj1080, poj1159):多维状态转移方程的应用。 ### 五、组合数学 1. **排列组合基础**: ...
- **背包问题**:如poj1837,解决有限资源下的最优化问题。 - **表格型DP**:如poj3267,通过状态转移矩阵求解问题。 6. **数学**: - **组合数学**:包括计数原理、排列组合以及递推关系,如poj3252。 - **...
- POJ 1130 - The Sultan's Successors(背包问题变体) **相关知识点**: - 状态定义与转移方程的建立 - 多维DP与一维DP的转换技巧 - DP算法的时间复杂度分析 - 背包问题的不同类型及其解法 #### 四、总结 通过...
动态规划则常用于解决背包问题、最长公共子序列等复杂问题;贪心算法常常用于解决最优调度、最小花费等问题;排序算法如快速排序、归并排序等也是常考内容;搜索算法如深度优先搜索、广度优先搜索和A*搜索等在解决...
0-1背包是最经典的背包问题之一,其目标是在容量有限的背包中装入价值最大的物品组合。可以用二维数组`dp[i][j]`表示前`i`个物品装入容量为`j`的背包中的最大价值,其中状态转移方程为`dp[i][j] = max(dp[i-1][j], ...
动态规划题目通常要求求解最优解,例如背包问题、最长公共子序列等问题。例如,题目poj3267和poj1836就属于动态规划问题,其中poj1836需要通过动态规划找到最优的编辑距离。 ### 5. 数学算法 数学算法涵盖代数、...
01背包问题是最经典的动态规划问题之一,问题描述为:给定一组物品,每种物品都有自己的重量和价值,在限定的总重量内,选择其中一些装入背包,使得背包内物品的总价值最大。而多重背包问题是指有N种物品,每种物品...
经典的0-1背包问题. 适合新手学习. 原题网址:http://poj.grids.cn/problem?id=2773
这些题目覆盖了基础的动态规划问题,如背包问题、最长递增子序列、矩阵链乘法等。例如: - **1018**:“Falsecoin”——经典的0/1背包问题变种。 - **1178**:“Camelot”——涉及到最短路径问题的变体。 - **...
在编程竞赛中,动态规划通常被用来解决如背包问题、最长公共子序列、最短路径等问题。 对于POJ 1170的具体问题,由于没有给出详细描述,我们可以进行一般性的动态规划知识讲解。动态规划问题通常分为以下几步: 1....