0
已解决
高翊天
初级守护
初级守护
#include<iostream>
using namespace std;
int n;
int w[100];
long long s;
int f[1000000];
int main()
{
cin>>n;
for (int i=1;i<=n;i++)
{
cin>>w[i];
s+=w[i];
}
int s1=s/2;
for (int i=1;i<=n;i++)
{
for (int v=s1;v>=w[i];v--)
{
f[v]=max(f[v-1],f[v-w[i]]+w[i]);
}
}
cout<<s-2*f[s1];
}
0
已采纳
黄俊博
资深光能
资深光能
核心如下: int v=sum/2; for (int i=1;i<=n;i++) { for (int j=v;j>=w[i];j--) { f[j]=max(f[j],f[j-w[i]]+c[i]); } } cout<<sum-2*f[v];
注意前面还要把输入的w累加,且c[i]=w[i];
懂吗??
0
0
0
0
0
程之行
高级守护
高级守护
for i:=1 to n do for j:=v downto s[i] do begin if f[j-s[i]] + c[i] > f[j] then f[j]:=f[j-s[i]] + c[i]; end; writeln(sum-f[v]-f[v]); end.
可以用一维写上面一样
0
0
杨陈卓
新手天翼
新手天翼
动态转移方程错
for(int i=1;i<=n;i++)
for(int j=m;j>=k[i];j--)
f[j]=max(f[j],f[j-k[i]]+k[i]);
0