摘要: http://poj.org/problem?id=3211一个背包的简单应用。我们可以这样想,对于同一种颜色的衣服,把他们的总时间t算出来,那么做一个容量为t/2的背包,背包里放的是这种颜色的衣服,重量是洗这件衣服的时间,价值也是洗这件衣服的时间,那么洗这种颜色的衣服的所需最小时间就是 max(t-dp【t/2】,dp【t/2】)用g++交才能过,c++不行,这是怎么个回事??View Code #include<iostream>#include<string.h>#include<string.h>#include<stdio.h>#inc 阅读全文
posted @ 2012-08-29 16:03 一把刷子 阅读(378) 评论(0) 推荐(0) 编辑
摘要: memset的功能是将一快内存中的内容以单个字节逐个拷贝的方式放到指定的内存中去。如memset(dp,0,sizeof(dp))其中dp为一个int型数组,因为int为4个字节,那么每一个字节的位置上都放 00000000 最好方的就是00000000 00000000 000000000 00000000 将该二进制转化为10进制后为0如果放-1 。则放的是 11111111 11111111 11111111 11111111 (每一个8为是-1的补码。)转化为十进制后也是-1但是放1 则放的是 00000001 00000001 00000001 00000001 转化为十进制后显然不 阅读全文
posted @ 2012-08-29 13:37 一把刷子 阅读(2383) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1421刚开始想的时候,想转化成背包来做,但是不好表示,然后考虑到dp中的有几个相关元素,这里有两,一个是物品个数,一个是选择的对数,那么有了状态dp[i][j]表示前i件物品选择j对所付出的代价,那么对于第i件有选与不选两种,所以dp[i][j]=min((dp[i-2][j-1]+charge(weight[i-1],weight[i])),dp[i-1][j]);即这件物品要选的话那么前一件和他是一对的,则代价是他们两的代价加上dp[i-2][j-2],如果这件物品不选则dp[i-1][j],前i-1件选 阅读全文
posted @ 2012-08-29 13:20 一把刷子 阅读(322) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1176开始对dp有感觉了,就是能够覆盖所有的状态,而且要有状态转移方程,即递推关系。那么这题就是,利用dp【i】【j】表示在第i秒在位置j可以获得的最大面包数,那么他可能从前一秒的左边,或者右边,或者原地不动来,那么着就是状态了。对于0和10这两个点要特殊处理。因为第一秒在位置5,所以初始化的时候要把第一秒的初始化了。初始化: dp[1][4]=map[1][4]; dp[1][5]=map[1][5]; dp[1][6]=map[1][6];状态转移:dp[i][j]=max(m... 阅读全文
posted @ 2012-08-29 00:34 一把刷子 阅读(150) 评论(0) 推荐(0) 编辑