zoukankan      html  css  js  c++  java
  • poj 1837 Balance(简单dp)

    题意:给你一架天平,C个挂钩位置和G个砝码,让你将这G个砝码全部用上,求有多少种方法使得天平平衡。

    思路:读完题后根本没有思路,如果让我自己想,我绝不会想到用dp做,但是这题是在背包问题的练习题里的,并且刚刚看完0-1背包,对dp有了一点理解,所以不难想到用dp做。可是,最后却在数组范围上卡了一下,想不明白为什么要开到15000,想了两天后,终于明白,力矩等于力臂*重量,而砝码的个数最多为20个,力臂最长为15,要使天平平衡的左右两边的重量为15*20*20 =7500,所以要开15000;

    代码:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #define maxn 15000
    #define maxm 21
    using namespace std ;
    
    int dp[maxm][maxn] ;
    
    int main()
    {
        int n , m , i , j , k ;
        int a[maxm] , b[maxm] ;
    
        while ( scanf ( "%d%d" , &n , &m ) != EOF )
        {
            for ( i = 1 ; i <= n ; i++ )
            scanf ( "%d" , &a[i] );
            for ( i = 1 ; i <= m ; i++ )
            scanf ( "%d" , &b[i] );
            memset( dp , 0 , sizeof  ( dp ));
            dp[0][maxn/2] = 1 ;
            for ( i = 1 ; i <= m ; i++ )
            for ( j = 1 ; j <= maxn ; j++ )
            if ( dp[i-1][j] )
            {
                for ( k = 1 ; k <= n ; k++ )
                dp[i][j + a[k] * b[i]] += dp[i-1][j];
            }
            printf ( "%d\n" , dp[m][maxn/2] );
        }
        return 0;
    }
  • 相关阅读:
    ORACLE PL/SQL编程总结(二)
    ORACLE PL/SQL基础编程
    Linux centos7环境下安装Nginx
    namespace 实例命名空间 及 应用命名空间 问题
    python 2.7 的django项目
    django项目 导出 和 安装 依赖包
    windows 2012 安装apache
    FX-玩列表
    记录pycharm快捷键出错的其中一个原因
    Django 安装配置
  • 原文地址:https://www.cnblogs.com/misty1/p/2537239.html
Copyright © 2011-2022 走看看