zoukankan      html  css  js  c++  java
  • dp学习笔记4

    砝码称重:

    View Code
     1 /*
     2 设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),用他们能称出的重量的种类数。
     3 */
     4 /*
     5 输入:
     6 a1  a2  a3  a4  a5  a6
     7 (表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个,中间有空格)。
     8 */
     9 /*
    10 样例输入:
    11 1 1 0 0 0 0
    12 正确输出:
    13 3
    14 */
    15 //分析:把问题稍做一个改动,已知a1+a2+a3+a4+a5+a6个砝码的重量w[i], w[i]∈{ 1,2,3,5,10,20}
    16 //其中砝码重量可以相等,求用这些砝码可称出的不同重量的个数.
    17 //这样一改就是经典的0/1背包问题的简化版了,求解方法完全和上面说的一样
    18 //这里就不多说了,只是要注意这个题目不是求最大载重量,是统计所有的可称出的重量的个数。
    19 
    20 
    21 #include<iostream>
    22 #include<cstdio>
    23 #include<cstring>
    24 using namespace std;
    25 
    26 int main(){
    27     int w[6]={1,2,3,5,10,20};
    28     int d[6];
    29     int dp[1001];
    30     memset(dp,0,sizeof(dp));
    31     int x;
    32     for(int i=0;i<6;i++){
    33         scanf("%d",&x);
    34         d[i]=w[i]*x;
    35     }
    36     for(int i=0;i<6;i++){
    37         for(int j=1000;j-w[i]>=0;j--){
    38             dp[j]=max(dp[j],dp[j-d[i]]+d[i]);
    39         }
    40     }
    41     printf("%d\n",dp[1000]);
    42     return 0;
    43 }
  • 相关阅读:
    堆和栈的区别(转)
    conversion to dalvik format failed with error 1的解决办法
    eclipse最实用快捷键
    java socket编程(转)
    Android 面试总结
    Android横竖屏总结(转)
    Android布局文件属性笔记(转)
    常用数据结构有哪些(转)
    经常用到的Eclipse快捷键(转)
    url编码转换
  • 原文地址:https://www.cnblogs.com/wally/p/2985574.html
Copyright © 2011-2022 走看看