码迷,mamicode.com
首页 > 其他好文 > 详细

poj1837 Balance

时间:2019-08-22 14:46:11      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:cout   class   正数   end   target   std   组合   分组背包   状态转移方程   

Topic Links

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

标签:cout   class   正数   end   target   std   组合   分组背包   状态转移方程   

原文地址:https://www.cnblogs.com/WELOTX/p/11394128.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!