1 条题解
-
0
C++ :
#include <stdio.h> int b[111][44444]; int run() { int n,i,j,a[111],t=0; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); for(i=0;i<=n;i++) for(j=0;j<=6000;j++) b[i][j]=-1; b[0][2000]=0; for(i=0;i<n;i++) { for(j=2000-t;j<=2000+t;j++) if(b[i][j]!=-1) { if(b[i+1][j]<b[i][j]) b[i+1][j]=b[i][j]; if(b[i+1][j+a[i+1]]<b[i][j]) b[i+1][j+a[i+1]]=b[i][j]; if(b[i+1][j-a[i+1]]<b[i][j]+a[i+1]) b[i+1][j-a[i+1]]=b[i][j]+a[i+1]; } t+=a[i+1]; } if(b[n][2000]==0) { b[n][2000]=-1; for(i=1;i<=n;i++) if(a[i]==0) b[n][2000]=0; } printf("%d\n",b[n][2000]); } int main() { int t,i=0; scanf("%d",&t); while(t!=0) { t--; i++; printf("Case %d: ",i); run(); } return 0; }
- 1
信息
- ID
- 748
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者