• 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
  • 相关阅读:
    4.nmap常用命令备忘录
    1.封神台sql注入实战靶场
    第一章、为了女神小芳
    2.kali部署vulhub
    5.docker可视化
    6.docker精髓
    【Rust】引用模式
    【Rust】虚类型测试
    【Rust】可变借用
    【Rust】虚类型参数
  • 原文地址:https://www.cnblogs.com/Beckinsale/p/7460478.html
Copyright © 2020-2023  润新知