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])+=dp[i-1][j]

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;

int dp[25][15005];
int c[25],w[25];

int main()
{
    int n ,m ,i ,j ,k;

    while(cin>>n>>m){
        for(i=1;i<=n;i++)
            cin>>c[i];
        for(i=1;i<=m;i++)
            cin>>w[i];

        memset(dp,0,sizeof(dp));
        dp[0][7500]=1;

        for(i=1;i<=m;i++){
            for(j=0;j<=15000;j++)
                if(dp[i-1][j])
                    for(k=1;k<=n;k++)
                        dp[i][j+w[i]*c[k]] += dp[i-1][j];
        }

        cout<<dp[m][7500]<<endl;
    }
}
时间: 2024-12-13 09:57:00

POJ 1837 Balance (01背包)的相关文章

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,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我还想不到这个思路,我感觉我进步挺大了,能独立推出转移方程了. 首先我们看这道题首先是要求力平衡,那么一个限制是重量.与力相关的有钩码与挂钩的位置.显然,钩码可以放

POJ1837:Balance(01背包)

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 of negligible weight and each arm's length is 15. Some hooks are attached to these arms and

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 动态规划

题目链接: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 2184--Cow Exhibition(0-1背包变形)

题目链接:http://poj.org/problem?id=2184 Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9479   Accepted: 3653 Description "Fat and docile, big and dumb, they look so stupid, they aren't much  fun..."  - Cows with Guns by

POJ 3211 (分组01背包) Washing Clothes

题意: 小明有一个贤妻良母型的女朋友,他们两个一起洗衣服. 有M种颜色的N件衣服,要求洗完一种颜色的衣服才能洗另外一种颜色. 两人可以同时洗,一件衣服只能被一个人洗. 给出洗每件衣服所用的时间,求两个人洗完这些衣服所用的最短时间. 分析: 因为每种颜色是分开洗的,所以我们可以单独考虑一种颜色的衣服. 因为洗完这些衣服的总时间是固定的,所以两个人洗的时间尽可能的相等,这样洗完的时间最短. 所以将总时间的一半作为背包容量(这里总时间的奇偶性并不影响),物品的体积和价值都是洗每件衣服所用的时间,然后进

POJ 2923 【01背包+状态压缩/状压DP】

题目链接 Emma and Eric are moving to their new house they bought after returning from their honeymoon. Fortunately, they have a few friends helping them relocate. To move the furniture, they only have two compact cars, which complicates everything a bit.