首页 > 其他 > 详细

P2347 砝码称重

时间:2019-08-04 00:08:36      阅读:94      评论:0      收藏:0      [点我收藏+]

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 砝码称重

原文:https://www.cnblogs.com/xiaoyezi-wink/p/11296825.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!