摘要: 思路:如题#include#include#include#include#include#define Maxm 100010#define eps 1e-4using namespace std;int vi[220],head[220],e,n,m,id[220],lab,num,dfn[220],low[220],Stack[220],top;double Max;struct Point{ double x,y;}p[210];struct Edge{ int u,v,next;}edge[Maxm];void init(){ memset(vi,0,sizeof(... 阅读全文
posted @ 2013-08-03 14:47 fangguo 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 思路:直接引用论文的话。暂时先不考虑“使剩下的物品都放不下”的条件,那就是求 0-1 背包的所有可行方案。 用 Fi[j]表示前 i 件物品中选若干件总体积为 j 的方案数,初始为 F0[0]=1,转移方程是: Fi[j] = Fi-1[j] (Vi>j) Fi[j] = Fi-1[j] + Fi-1[j-Vi](j>=Vi) 显然这个算法的效率是 O(n*C)的,它计算了所有装放背包的方案数。 现在考虑“使剩下的物品都放不进去”的条件,如果剩下的物品中体积最小为 v,那么方案数就是 sum{ Fn[j] }(C>=j>C-v)。前提是我们事先确定了剩下中体积最小的是哪 阅读全文
posted @ 2013-08-03 12:24 fangguo 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 思路:把价值看做体积,而价值的大小还是其本身,那么只需判断1-m中的每个状态最大是否为自己,是就+1;#include#include#include#include#define Maxn 100010#define Max(a,b) (a)>(b)?(a):(b)using namespace std;int dp[Maxn],num[110],v[110];struct Que{ int pos,val;}que[Maxn*2];int main(){ int n,m,i,j; while(scanf("%d%d",&n,&m)!=EOF,n&a 阅读全文
posted @ 2013-08-03 10:13 fangguo 阅读(354) 评论(1) 推荐(1) 编辑