1 条题解
-
0
C++ :
#include<stdio.h> #include<cstring> using namespace std; const int maxn=256*256; const int maxx=256*256+256; bool f[maxx+1],flag; int nn,i,j,n,c,a[11],now,k; int main() { scanf("%ld",&nn);n=0; for (i=1;i<=nn;i++) { scanf("%ld",&c); if (c==1) { printf("0\n"); return 0; } flag=true; for (j=1;j<=n;j++) if (c%a[j]==0) {flag=false;break;} if (flag) a[++n]=c; } memset(f,0,sizeof(f)); f[0]=true; for (i=1;i<=n;i++) for (j=a[i];j<=maxx;j++) if (f[j-a[i]]) f[j]=true; for (i=maxx;i>maxn;i--) if (!f[i]) {printf("0\n");return 0;} for (i=maxn;i>0;i--) if (!f[i]) { printf("%ld\n",i); return 0; } printf("0\n"); return 0; }Pascal :
program nuggets; var f:array[0..666666]of boolean; a:array[0..10]of longint; i,j,m,max,n:longint; begin readln(n); for i:=1 to n do begin readln(a[i]); if a[i]>max then max:=a[i]; end; f[0]:=true; for i:=0 to sqr(max)+max do //数学可证明到最大到这个范围就都可以包装; if f[i] then // 这个位置可以得到 for j:=1 to n do //把之后能达到的都赋值成true; f[i+a[j]]:=true else if i>m then m:=i; if m>sqr(max) then writeln(0) else writeln(m); end.
- 1
信息
- ID
- 838
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者