zoukankan      html  css  js  c++  java
  • poj 1837 Balance (背包的应用)

    http://poj.org/problem?id=1837
    
    
    /*题意:有一个device(直杆),以中点为支点,左右长度都为15,
    上面在不同位置分布着一些挂钩。现在给出c个挂钩,
    和它们在杆上的位置(以中点的原点的x轴表示),以及Gigel有G个砝码,和它们各自的重量。求如果把这些钩码全部挂在任意钩上(一钩个挂任意多个),
    最终device能达到平衡的情况数。
    
    解题思路:01背包。首先这里有负数,所以用到了偏移变量temp(以他为平衡点),dp[i][j]表示
    i件东西,放上去达到j重量所需的方法数。
    因为最终要的是平衡状态 所以答案为:dp[g][temp];
     状态方程 :dp[i][k+val]+=dp[i-1][k];
    
    
    
      */
    
    #include<stdio.h>
    #include<string.h>
    const int Nmax=15000;
    const int temp=7500;
    int  dp[30][Nmax],h[30],w[30];
    int main()
     {
         int i,j,k,c,g,val;
         while(scanf("%d%d",&c,&g)!=EOF)
         {
             for(i=1;i<=c;i++)scanf("%d",&h[i]);
             for(i=1;i<=g;i++)scanf("%d",&w[i]);
             memset(dp,0,sizeof(dp));
             dp[0][temp]=1;
             for(i=1;i<=g;i++)
             {
                 for(j=1;j<=c;j++)
                 {
                     val=h[j]*w[i];
                     for(k=0;k<=Nmax;k++)
                     if(dp[i-1][k])
                     dp[i][k+val]+=dp[i-1][k];
                 }
             }
             printf("%d\n",dp[g][temp]);
    
    
         }
    
     }
    

      

  • 相关阅读:
    Uva 11401 数三角形
    Uva 11538 象棋中的皇后
    数学基础——基本计数方法
    八数码问题
    python 爬poj.org的题目
    python 爬图片
    hiho 第135周 九宫
    Uva 11464 偶数矩阵
    BZOJ 1001 [BeiJing2006]狼抓兔子
    LA 3708 墓地雕塑
  • 原文地址:https://www.cnblogs.com/acSzz/p/2414040.html
Copyright © 2011-2022 走看看