zoukankan      html  css  js  c++  java
  • poj 3624 && hdu 2955(背包入门)

    http://poj.org/problem?id=3624

    背包中最基础的01背包,大意是有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大

    主要是要有动态规划的思想,列出每个容量下的最大值,每次只考虑取或不取两种情况《一个状态一个状态的转移

     1 #include<iostream>
     2 #include<cstring>
     3 using namespace std;
     4 int dp[12900];
     5 int w[3410],d[3410];
     6 int main()
     7 {
     8     int n,m,i,j;
     9     while (cin>>n>>m)
    10     {
    11         for (i=1;i<=n;i++)
    12             cin>>w[i]>>d[i];
    13         memset(dp,0,sizeof(dp));
    14         for (i=1;i<=n;i++)
    15         {
    16             for (j=m;j>=w[i];j--)
    17                 dp[j]=max(dp[j],dp[j-w[i]]+d[i]);
    18         }
    19         cout<<dp[m]<<endl;
    20     }
    21     return 0;
    22 }

    http://acm.hdu.edu.cn/showproblem.php?pid=2955

    有小数不好处理,所以逆向考虑,把抢银行的价值作为容量来转移

     1 #include<cstdio>
     2 #include<cstring>
     3 using namespace std;
     4 int a[101];
     5 double b[101],dp[100001];
     6 double max(double x,double y)
     7 {
     8     if (x>y) return x;
     9     else return y;
    10 }
    11 int main()
    12 {
    13     int t,m,i,j;
    14     double n;
    15     while (~scanf("%d",&t))
    16     {
    17         while (t--)
    18         {
    19             scanf("%lf %d",&n,&m);
    20             int sum=0;
    21             for (i=1;i<=m;i++)
    22             {
    23                scanf("%d %lf",&a[i],&b[i]);
    24                sum+=a[i];
    25             }
    26             memset(dp,0 ,sizeof(dp));
    27             dp[0]=1;
    28             for (i=1;i<=m;i++)
    29             {
    30                 for (j=sum;j>=a[i];j--)
    31                     dp[j]=max(dp[j],(1-b[i])*dp[j-a[i]]);
    32             }
    33             int ans=0;
    34             for (i=1;i<=sum;i++)
    35             {
    36                 //printf("%lf
    ",dp[i]);
    37                 if ((1-dp[i])<=n&&ans<i) ans=i;
    38             }
    39             printf("%d
    ",ans);
    40         }
    41     }
    42     return 0;
    43 }
  • 相关阅读:
    oracle inside(5)
    oracle inside(4)
    WF & WCF(1)
    oracle inside(7)
    oracle inside(11)
    ArrayList使用toArray()构造数组时的问题
    在android下抓包
    为什么中国的程序员技术偏低
    [置顶] 女人与程序的对应关系!
    Java synchronized详解
  • 原文地址:https://www.cnblogs.com/JJCHEHEDA/p/4883789.html
Copyright © 2011-2022 走看看