zoukankan      html  css  js  c++  java
  • poj1837 Balance ***

    /* [转]
    *
    * d[i][j]表示在挂上前i个物体的时,平衡度为j
    * (j>0时表示左边重,j=0时表示天平平衡,j<0时表示右边重)时挂法的数量,
    * 而根据题意可以确定j的取值范围为:[-7500,7500],于是可以得到状态转移方程为:
    * d[i][j]+=(d[i-1][j-weigh[k]*pos[i]]),
    * weigh[k]表示第k个挂钩的位置,pos[i]为第i个砝码的重量
    * 由于j-weigh[k]*pos[i]可能为负数,因此统一加上7500,
    * 那么初始状态d[0][7500]=1(此时表示天平平衡),表示不用物体且使得天平平衡时的方法只有一种.
    *
    *
    */

    #include
    <cstdio>
    #include
    <cstring>
    using namespace std;

    const int max1 = 7500, max2 = 50;
    int c, g, weigh[max2], pos[max2], d[max2][max1 * 2];


    int main(){
    scanf(
    "%d%d", &c, &g);
    for(int i=1; i<=c; i++)
    scanf(
    "%d", &pos[i]);
    for(int i=1; i<=g; i++)
    scanf(
    "%d", &weigh[i]);

    memset(d,
    0, sizeof(d));
    d[
    0][max1] = 1;
    for(int i=1; i<=g; i++){
    for(int j=0; j<=max1*2; j++)
    for(int k=1; k<=c; k++)
    d[i][j]
    += d[i-1][j - weigh[i]*pos[k]];

    }

    printf(
    "%d\n", d[g][max1]);

    return 0;
    }
  • 相关阅读:
    iOS
    iOS
    ios
    iOS
    ios
    ios
    iOS
    ios
    常用NSString的方法
    instancetype
  • 原文地址:https://www.cnblogs.com/longdouhzt/p/2163940.html
Copyright © 2011-2022 走看看