zoukankan      html  css  js  c++  java
  • 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
    ",ans);
        return 0;
    }
    
    
     
  • 相关阅读:
    写了一个Rijndael工具类
    使用bcel动态创建class
    有感于大理古城的天主教堂
    joj 1089 &&zoj 1060&&poj 1094 以及wa的分析和数据
    joj1026
    joj 1317
    joj 1171
    joj 2343
    joj 1078 hdu 1116
    joj 1189
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11296825.html
Copyright © 2011-2022 走看看