题解 | #称砝码#
称砝码
https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
#include <stdio.h> #include <string.h> int main() { int n=0; scanf("%d",&n); int kind[10]={0}; int num[10]={0}; int i=0; int j=0; int total=0; for(i=0;i<n;i++) { scanf("%d",&kind[i]); } for(i=0;i<n;i++) { scanf("%d",&num[i]); total=total+kind[i]*num[i]; } int map[total+1]; memset(map,0,sizeof(map)); map[0]=1; int k=0; for(i=0;i<n;i++) { for(j=0;j<num[i];j++) { for(k=total;k>=0;k--) if(map[k]) { map[k+kind[i]]++; } } } int count=0; for(i=0;i<=total;i++) { if(map[i]) count++; } printf("%d\n",count); return 0; }