1 条题解
-
0
C :
#include "stdio.h" #include "string.h" int n,m,s,min; int a[101],b[10000],f[10000]; int main() { int i,j,k; scanf("%d",&n); f[0]=n; min=10000; for(i=0;i<n;i++) { m=s=0; while(scanf("%d",&a[m])&&a[m]!=-1) s+=a[m++]; memset(b,0,sizeof(b)); b[0]=1; for(j=0;j<m;j++) { for(k=s;k>=a[j];k--) { if(b[k]) continue; if(b[k-a[j]]) { b[k]=1; f[k]++; } } } if(min>s) min=s; } for(i=s;i>=0;i--) if(f[i]==n) { printf("%d\n",i); break; } return 0; }
C++ :
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int a[101][101]={0}; int n,v; bool f[101][10001]={false}; void init(); void bag(); int main() { //freopen("castle.in","r",stdin); //freopen("castle.out","w",stdout); init(); bag(); return 0; } void init() { cin>>n; v=0x7fffffff; for(int i=1;i<=n;i++) { f[i][0]=1; int temp=0,t; while(cin>>t && t!=-1) { a[i][0]++; a[i][a[i][0]]=t; temp+=t; } if(v>temp)v=temp; } } void bag() { for(int k=1;k<=n;k++) { for(int i=1;i<=a[k][0];i++) { for(int j=v;j>=a[k][i];j--) f[k][j]=f[k][j]||f[k][j-a[k][i]]; } } for(int i=v;i>=0;i--) { bool flag=true; for(int j=1;j<=n;j++) if(!f[j][i]) { flag=false; break; } if(flag) { cout<<i<<endl; break; } } }
- 1
信息
- ID
- 831
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者