1 条题解
-
0
C :
#include "stdio.h" int a[]={1,2,3,5,10,20}; int b[6],f[1001]; int t,s; int main() { int i,j,k; s=t=0; for(i=0;i<6;i++) { scanf("%d",&b[i]); s+=a[i]*b[i]; } f[0]=1; for(i=0;i<6;i++) { if(b[i]==0) continue; k=1; while(k<b[i]) { for(j=s;j>=k*a[i];j--) { if(f[j]) continue; if(f[j-k*a[i]]) f[j]=1,t++; } b[i]-=k; k*=2; } k=b[i]; for(j=s;j>=k*a[i];j--) { if(f[j]) continue; if(f[j-k*a[i]]) f[j]=1,t++; } } printf("%d\n",t); return 0; }C++ :
#include<iostream> using namespace std; const int w[7]={0,1,2,3,5,10,20}; int num[7],f[1001]; bool can[1001]; //ifstream cin("fama.in"); //ofstream cout("fama.out"); int main() { while (cin>>num[1]>>num[2]>>num[3]>>num[4]>>num[5]>>num[6]) { fill(can,can+1001,0); f[0]=1; f[1]=0; can[0]=true; for (int i=1;i<=6;i++) { int total=f[0]; //已经求出的重量数量 for (int j=1;j<=total;j++) for (int k=1;k<=num[i];k++) if (!can[f[j]+k*w[i]]) { can[f[j]+k*w[i]]=true; f[0]++; f[f[0]]=f[j]+k*w[i]; } } cout<<f[0]-1<<endl; } // system("pause"); return 0; }Pascal :
var w:array[1..6]of integer=(1,2,3,5,10,20); a:array[0..10000]of longint; b:array[0..1000]of boolean; max,ans,i,j,k:longint; begin for i:=1 to 6 do begin read(a[i]); max:=max+a[i]*w[i]; end; fillchar(b,sizeof(b),false); b[0]:=true; for i:=1 to 6 do for j:=1 to a[i] do for k:=w[i] to max do if not(b[k]) then if b[k-w[i]] then b[k]:=true; for i:=1 to max do if b[i] then inc(ans); write(ans); end.
- 1
信息
- ID
- 2919
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者