摘要: 该题是一道分组背包题;题意就是ACboy发最多M的时间能够得到最多效益;输入有N没课程,没门课程发费j天得到的效益是map[i][j];View Code #include<iostream>#include<cstdio>#include<cstring>using namespace std;int map[124][124];inline int Max( int a , int b ){ return a > b ? a : b; }int DP( int N , int M ){ int f[124][124] ={ 0 }; for( in 阅读全文
posted @ 2012-03-10 19:23 wutaoKeen 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 该题就用反方向思考,就是p = 1.0 -p 就可以了,不安全系数变成安全系数,再把安全系数相乘就可以了;View Code #include<iostream>#include<cstdio>#include<cstring>using namespace std;int ZeroOnepack( double pro[] ,int value[],double p ,int N, int sum ){ double f[10024] ={ 1.0 }; for( int i = 0 ; i < N; i++ ) { for( int j = sum 阅读全文
posted @ 2012-03-10 15:53 wutaoKeen 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 这是我A的第一个分组背包,这就没有用优化,这是暴力的,这里优化可以先对分组进行排序,那样就会节约好多的时间;分组背包是:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。这里我们就可以设计成一个二维数组,f[kind][money],(kind表示当前已经拥有的品牌种类数目,money 表示当前已经花费了的前的数目)。当前状态的来源有二:A、当前品牌数目的前提之下取最大的值;B、在比当前品牌数目少的基础之上放一个另外品牌的商品的最大值; 阅读全文
posted @ 2012-03-10 14:54 wutaoKeen 阅读(238) 评论(0) 推荐(0) 编辑