zoukankan      html  css  js  c++  java
  • POJ 1837 Balance 01背包

    题目: http://poj.org/problem?id=1837

    感觉dp的题目都很难做,这道题如果不看题解不知道憋到毕业能不能做出来,转化成了01背包问题,很神奇。。

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 int dp[20][15000];
     5 int c[20], w[20];
     6 
     7 int main()
     8 {
     9     int n, m;
    10     scanf("%d %d", &n, &m);
    11     //天平上有n个砝码位置
    12     for(int i = 1; i <= n; i++)
    13     {
    14         scanf("%d", &c[i]);
    15     }
    16     //有m和砝码
    17     for(int i = 1; i <= m; i++)
    18     {
    19         scanf("%d", &w[i]);
    20     }
    21     
    22     memset(dp, 0, sizeof(dp));
    23     
    24     //0到15000来表示-7500到7500,这样保证数组下标为正。不挂砝码时天平平衡方案为1
    25     dp[0][7500] = 1;
    26     
    27     //挨个挂上每个砝码
    28     for(int i = 1; i <= m; i++)
    29     {
    30         //枚举所有状态
    31         for(int j = 0; j <= 15000; j++)
    32         {
    33             if(dp[i-1][j])
    34             {
    35                 for(int k = 1; k <= n; k++)
    36                 {
    37                     dp[i][j+c[k]*w[i]] += dp[i-1][j];
    38                 }
    39             }
    40         }
    41     }
    42     printf("%d
    ", dp[m][7500]);
    43     return 0;
    44 }
    View Code
  • 相关阅读:
    Python Day13:开放封闭原则、函数装饰器、全局局部变量
    Python Day12
    Python Day11
    Python Day10
    drf框架
    drf框架
    drf框架
    drf框架
    vue框架
    vue框架
  • 原文地址:https://www.cnblogs.com/wolfred7464/p/3276029.html
Copyright © 2011-2022 走看看