P2347 砝码称重

Posted xiaoyezi-wink

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P2347 砝码称重相关的知识,希望对你有一定的参考价值。

P2347 砝码称重

题解

首先我们把这些砝码一个一个的摆出来

    for(int i=1;i<=6;i++)
    
        x=read();
        for(int j=1;j<=x;j++) a[++cnt]=ma[i];
    

 

然后数组 f[i] 记录 i 这个质量能不能摆出来,显然 f [0] 可以

如果这个质量可以摆出来的话,那么在此基础上加上一个砝码,那么 新的质量也是可到达的

      for(int i=1;i<=cnt;i++)
      for(int j=1000;j>=0;j--)
         if(f[j]) f[j+a[i]]=1;

 

最后统计一下哪些质量可以摆出来,就是答案了

 

 

代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstring>
#include<cstdlib>
#include<queue>

using namespace std;

inline int read()

    int ans=0;
    char last= ,ch=getchar();
    while(ch<0||ch>9) last=ch,ch=getchar();
    while(ch>=0&&ch<=9) ans=ans*10+ch-0,ch=getchar();
    if(last==-) ans=-ans;
    return ans;


int ma[7]=0,1,2,3,5,10,20;
int a[1010],cnt=0,ans=0;
bool f[1010];

int main()

    int x;
    for(int i=1;i<=6;i++)
    
        x=read();
        for(int j=1;j<=x;j++) a[++cnt]=ma[i];
    
    f[0]=1;
    for(int i=1;i<=cnt;i++)
      for(int j=1000;j>=0;j--)
         if(f[j]) f[j+a[i]]=1;
    for(int i=1;i<=1000;i++)
      if(f[i]) ans++;
    printf("Total=%d\n",ans);
    return 0;



 

 

以上是关于P2347 砝码称重的主要内容,如果未能解决你的问题,请参考以下文章

P2347 砝码称重

P2347 砝码称重

洛谷——P2347 砝码称重

P2347 砝码称重

洛谷P2347 砝码称重 [2017年4月计划 动态规划01]

P2347 砝码称重