摘要:
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)
浙公网安备 33010602011771号