poj 1837 Balance (0 1 背包)

Balance

Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 10326   Accepted: 6393

题意:给你n个挂钩g个砝码  以及n个挂钩的距离天平中心距离(负的代表左边正的代表右边)g个砝码的重量。

要求输出能够令天平平衡的方法种类

解题思路     http://user.qzone.qq.com/289065406/blog/1299341345 
非常具体

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
    int dp[25][15005];
    int n,g,c[25],w[25],i,j;
    while(cin>>n>>g)
    {
        for(i=1;i<=n;i++)
            cin>>c[i];
        for(i=1;i<=g;i++)
            cin>>w[i];
        memset(dp,0,sizeof(dp));
        dp[0][7500]=1;
        for(i=1;i<=g;i++)
            for(j=0;j<=15000;j++)

            if(dp[i-1][j])
              {
               for(int k=1;k<=n;k++)
                      dp[i][j+c[k]*w[i]]+=dp[i-1][j];
                }
        cout<<dp[g][7500]<<endl;
    }
        return 0;
}
时间: 2024-12-09 02:02:46

poj 1837 Balance (0 1 背包)的相关文章

poj 1837 Balance (dp,01背包)

链接:poj 1837 题意:有一个天平,天平左右两边各有若干个钩子,总共有C个钩子,有G个钩码, 求将钩码挂到钩子上使天平平衡的方法的总数.其中可以把天枰看做一个以x轴0点作为平衡点的横轴 分析:力臂=重量 *臂长 = g[i]*c[j] 当平衡度k=0时,说明天枰达到平衡,k>0,说明天枰倾向右边(x轴右半轴),k<0则左倾 因此可以定义一个 状态数组dp[i][k],意为在挂满前i个钩码时,平衡度为k的挂法的数量. 由于距离c[i]的范围是-15~15,钩码重量的范围是1~25,钩码数量

POJ 1837 Balance

题意:给你C个挂钩,W个钩码,要你能使一个天平平衡 数据解释: 2 4 -2 3 3 4 5 8 以原点为支点,那么-2代表支点左边2处有一个钩码,同理3代表右边的点 所以案例数据有一个成立的例子是(3+5)*3=(4+8)*2或是(3+4+5)*2=8*3(力臂平衡) 有2种情况所以输出2: 思路:这个如果不是按照题目的分类说是DP我还想不到这个思路,我感觉我进步挺大了,能独立推出转移方程了. 首先我们看这道题首先是要求力平衡,那么一个限制是重量.与力相关的有钩码与挂钩的位置.显然,钩码可以放

POJ 1745 【0/1 背包】

题目链接:http://poj.org/problem?id=1745 Divisibility Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13431   Accepted: 4774 Description Consider an arbitrary sequence of integers. One can place + or - operators between integers in the sequen

poj 1837 Balance(背包)

题目链接:http://poj.org/problem?id=1837 Balance Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10983   Accepted: 6824 Description Gigel has a strange "balance" and he wants to poise it. Actually, the device is different from any other

POJ 1837 Balance (多重背包计数)

Balance Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 11706   Accepted: 7305 Description Gigel has a strange "balance" and he wants to poise it. Actually, the device is different from any other ordinary balance. It orders two arms

POJ 1837 Balance 背包dp

点击打开链接 Balance Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 11067   Accepted: 6865 Description Gigel has a strange "balance" and he wants to poise it. Actually, the device is different from any other ordinary balance. It orders t

POJ 1837 Balance (01背包)

题意:有一个天平,左臂右臂各长15,然后给出n,m.n代表有几个挂钩,挂钩给出负数代表在左臂的距离,正数则在右臂:m代表有m个砝码,要你求出使得这个天平保持平衡有几种方法,要求所有砝码全部使用完. 思路:首先我们先要明确dp数组的作用,dp[i][j]中,i为放置的砝码数量,j为平衡状态,0为平衡,j<0左倾,j>0右倾,由于j作为下标不能是负数,所以我们要找一个新的平衡点,因为15*20*20 = 7500,所以平衡点设置为7500,然后我们可以得出动态方程 dp[i][j+w[i]*c[k

poj 1837 Balance 动态规划

题目链接:http://poj.org/problem?id=1837 使用迭代器对STL容器进行遍历的方法: for(set<int>::iterator it = check.begin(); it != check.end(); it++) { //...*it }   本题 a[]存挂钩位置 b[]存物品质量 把挂在天平左边的物品的质量视为负数 反之为正数 总质量的极限为20件重25的物品都挂在15的天平挂钩处 即7500 dp[i][j]表示前i件物品总质量为(j-10000)时的挂

POJ 1837 Balance DP

Balance Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10299   Accepted: 6372 Description Gigel has a strange "balance" and he wants to poise it. Actually, the device is different from any other ordinary balance. It orders two arms