poj1837 Balance
Posted welotx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj1837 Balance相关的知识,希望对你有一定的参考价值。
Topic meaning:有一天平其左右臂长为15,有m个数字,一个数字表示天平上一个钩子距天平中心点的距离,左边为负数,右边为正数,有n个质量确定的砝码,所有砝码都应被悬挂上去,一个钩子可以挂多个砝码,问有多少种挂法使得天平保持平衡;
Method of Solving:分组背包
每个砝码可以悬挂的位置为一组,dp[i][j]表示前i个砝码使得天平左右力量之差为j的方案数,由于j不能为负数在结合题目条件,故将j增大3000,即dp[0][3000]为悬挂0个砝码时左右力量之差为0,可得其方案数为1
所以dp[i][j]是用第i个砝码与第k个钩子的组合
状态转移方程:dp[i][j]=dp[i][j]+dp[i-1][j+a[i]*c[k]];
#include<iostream> using namespace std; int n,m,c[25],a[25],dp[25][6005]; int main() cin>>m>>n; for(int i=1;i<=m;i++) cin>>c[i]; for(int i=1;i<=n;i++) cin>>a[i]; dp[0][3000]=1; for(int i=1;i<=n;i++) for(int j=6000;j>=0;j--) for(int k=1;k<=m;k++) dp[i][j]=dp[i][j]+dp[i-1][j-c[k]*a[i]]; cout<<dp[n][3000]<<endl; return 0;
以上是关于poj1837 Balance的主要内容,如果未能解决你的问题,请参考以下文章