2011年10月31日
摘要: 01背包第一题。刚开始开的数组为int mat[N][W],然后内存超了。然后优化成这样既可。#include<iostream> #define max(a,b) (a>b?a:b) using namespace std; //const int N=3410; const int W=13888; int mat[2][W]; int n,w; int main() { scanf("%d%d",&n,&w); int wi,di; for(int i=1;i<=n;i++) { scanf("%d%d",& 阅读全文
posted @ 2011-10-31 23:16 不是我干的 阅读(121) 评论(0) 推荐(0)
摘要: 一.01背包问题给定一个容量为W的背包。和n个物品各为wi重量和价值各为ci的物品i。(1<=i<=n)问放哪几个物品进去使总价值最大。顾名思义,01背包,01的0代表不放进去,1代表放进去。对于每个物品i都有01两种选择。如果用最原始的枚举法。从第一个物品开始对每个物品进行枚举放还是不放。这样的算法实际上是一棵n层二叉树,所以时间复杂度为(2^n)。显然应该有更好的算法来解决。从构造这个二叉树的过程中其实就可以发现。每个节点其实是一个状态,每个状态含有两个关键参数CC\WW。比如:根节点(第0层)代表任何物品都不放进去,状态参数为0\W,前者代表此时总价值0,可用背包容量为W。第 阅读全文
posted @ 2011-10-31 22:23 不是我干的 阅读(204) 评论(0) 推荐(0)