1 条题解
-
0
C :
#include"stdio.h" #include"string.h" int dp[10001]; int max(int a,int b) { return a>b?a:b; } int main() { int n; while(scanf("%d",&n)!=EOF) { int s[501],i,j,sum=0; memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) { scanf("%d",&s[i]); sum+=s[i]; } int v=sum/2; for(i=0;i<n;i++) for(j=v;j>=s[i];j--) dp[j]=max(dp[j],dp[j-s[i]]+s[i]); if(dp[v]!=sum-dp[v]) printf("%d %d\n",dp[v],sum-dp[v]); else printf("%d\n",dp[v]); } return 0; }
C++ :
#include <stdio.h> #define max(a,b) a>b?a:b int V,ans,n,w[21],sum[21]; void dfs(int i,int cnt) { if(i == 0) { ans = max(ans,cnt); return ; } if(ans == V || cnt+sum[i] <= ans) //cut return ; if(cnt+w[i] <= V) dfs(i-1,cnt+w[i]); dfs(i-1,cnt); } int main() { while(~scanf("%d",&n)) { ans = 0; for(int i=1;i<=n;i++) { scanf("%d",&w[i]); sum[i] = sum[i-1] + w[i]; } V = sum[n]/2; dfs(n,0); if (2*ans<sum[n])printf("%d %d\n",ans,sum[n]-ans); else printf("%d\n",ans); } return 0; }
- 1
信息
- ID
- 800
- 时间
- 3000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者