您的位置:首页 > 其它

【POJ1837】Balance,带负体积状态的01背包,水题

2014-09-22 09:51 435 查看
天平上有若干钩子,你在上面放砝码使它平衡,求有多少种方法。

状态怎么转移,状态是什么不赘述了,只是记得把状态往后推推,别因为负状态RE就好了。

比如需要用到f[-2],f[-1],f[0],f[1],f[2],那么就把他们变成f[1~5],然后用的时候f[i]写成f[3+i]就好了!

贴代码,不懂自己看!

#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 25
#define M 6000
#define inf 0x3f3f3f3f
using namespace std;

int n,m;
int a
,b
,f
[M<<1];
int A1,A2,A,B;
int main()
{
//	freopen("test.in","r",stdin);
	int i,j,k;
	scanf("%d%d",&n,&m);
	A1=inf;A2=-inf;B=0;
	for(i=1;i<=n;i++)scanf("%d",&a[i]),A1=min(A1,a[i]),A2=max(A2,a[i]);
	for(i=1;i<=m;i++)scanf("%d",&b[i]),B+=b[i];
	A=max(-A1,A2);
	A*=B;
	f[0][M]=1;
	for(i=1;i<=m;i++)for(j=1;j<=n;j++)
	{
		for(k=M-A;k<=M+A;k++)
		{
			f[i][k]+=f[i-1][k-a[j]*b[i]];
		}
	}
	printf("%d\n",f[m][M]);
	return 0;
}


复制去Google翻译翻译结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: