zoukankan      html  css  js  c++  java
  • poj1742--coins--多重背包可行性

    Description

    现在给你n种硬币,每个硬币的价值是a[i],以及此种硬币的数量为c[i],问你能用这些小硬币拼出来几种不同价值的大硬币,使得大硬币的价值在1~m之间。

    Sample Input

    3 10

    1 2 4 2 1 1

    2 5

    1 4 2 1

    0 0

    Sample Output

    8

    4

    题解:

      楼教主的男人八题之一qwq,听说是叫什么裸的多重背包可行性问题,题解都在注释里了。

     1 #include<iostream>
     2 #include<cmath>
     3 #include<cstring>
     4 using namespace std;
     5 const int maxn=100001;
     6 int w[maxn],num[maxn];
     7 int f[maxn],sum[maxn],ans;
     8 int main()
     9 {
    10     int n,m;
    11     while(scanf("%d%d",&n,&m)!=EOF)
    12     {
    13         if(n+m==0)break;
    14         for(int i=1;i<=n;i++)
    15             scanf("%d",&w[i]);
    16         for(int i=1;i<=n;i++)
    17             scanf("%d",&num[i]);
    18         memset(f,0,sizeof(f));
    19         f[0]=1;ans=0;
    20         for(int i=1;i<=n;i++)
    21         {
    22             memset(sum,0,sizeof(sum));
    23             for(int j=w[i];j<=m;j++)
    24             {
    25                 //f[j]!=1----当前有位置放物品
    26                 //f[j-w[i]]!=0----没有空着位置不放
    27                 //sum[j-w[i]]+1<=num[i]----当前物品放的数量没有超过限制
    28                 if(!f[j]&&f[j-w[i]]&&sum[j-w[i]]+1<=num[i])
    29                 {
    30                     f[j]=1;
    31                     sum[j]=sum[j-w[i]]+1;
    32                     ans++;
    33                 } 
    34             }
    35         }
    36         printf("%d
    ",ans);
    37     }
    38     return 0;
    39  } 
    View Code
  • 相关阅读:
    串 --- 匹配
    串 --- 匹配
    计算几何 --- 哈希优化
    哈希 --- 线性探测法
    拓扑排序 --- 反向建图
    swift学习
    CocoaPods安装教程 pod setup很慢解决方案
    Adobe Fireworks CS6 Mac破解版
    iStat for mac
    mac环境下清理系统垃圾clearMyMac 3.9 破解版
  • 原文地址:https://www.cnblogs.com/Beckinsale/p/7460478.html
Copyright © 2011-2022 走看看