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 砝码称重的主要内容,如果未能解决你的问题,请参考以下文章