1 条题解
-
0
C :
#include<stdio.h> int v[1001]={0}; int main() { int A,B,C,D,E,F; int s=0; scanf("%d%d%d%d%d%d",&A,&B,&C,&D,&E,&F); int a,b,c,d,e,f; for(a=0;a<=A;a++) for(b=0;b<=B;b++) for(c=0;c<=C;c++) for(d=0;d<=D;d++) for(e=0;e<=E;e++) for(f=0;f<=F;f++) { s=a*1+b*2+c*3+d*5+e*10+f*20; v[s]=1; } int i; int count=0; for(i=1;i<=1000;i++) if(v[i])count++; printf("Total=%d",count); return 0; }
C++ :
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; int sum; ///表示输入的砝码的总质量 int ma[6]; ///六种砝码的个数 int weight[6]={1,2,3,5,10,20}; ///六种砝码的重量 char dp[1001]; ///标记位 void input(); ///输入每个砝码的数量,并求出所有砝码的总质量sum void exeDP(); void output(); ///判断标记为1的数量,并输出 int main() { memset(dp,0,sizeof(dp)); input(); exeDP(); output(); return 0; } void input() { int i; sum=0; for(i=0;i<6;i++) { scanf("%d",&ma[i]); sum=sum+(ma[i]*weight[i]); } } void exeDP() { int i,j,z; dp[0]=1; for(i=0;i<6;i++) ///六种砝码 { for(j=0;j<ma[i];j++) ///每种砝码的个数 { for(z=sum;z>=weight[i];z--) ///判断每种质量是否可以被称出 { if(dp[z-weight[i]]==1) dp[z]=1; } } } } void output() { int i,time=0; for(i=1;i<=sum;i++) { if(dp[i]==1) ///若能被称出,则计数 time++; } cout<<"Total="<<time; }
Pascal :
var c,a,f:Array[0..2000]of longint; i,j,k,ans:longint; begin // assign(input,'weight.in'); reset(input); //assign(output,'weight.out'); rewrite(output); for i:=1 to 6 do read(a[i]); c[1]:=1; c[2]:=2; c[3]:=3; c[4]:=5; c[5]:=10; c[6]:=20; f[0]:=1; for i:=1 to 6 do for k:=1 to a[i] do for j:=1000 downto c[i] do if f[j-c[i]]=1 then f[j]:=1; for i:=1 to 1000 do if f[i]=1 then inc(ans); writeln('Total=',ans); // close(output); end.
- 1
信息
- ID
- 846
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者