1
已采纳
陆姗姗
资深守护
资深守护
先计算出所有西瓜的总重量sum,然后根据总重量的一半sum/2来找以sum/2为最大重量的时候用01背包问题的思路来找此时可以达到的最大重量max,总重量是sum,我们找到其中的一份的重量是max,那么另一份的重量是sum-max,所以两份重量的差值是(sum-max)-max
最好的情况是max==sum/2,此时差值为0
即使max!=sum/2,max也是当前里sum/2最近种情况,所以差值一定也是最小的
1
栾峻岩
初级天翼
初级天翼
01背包,如例题,
for (int i=1;i<=n;i++)
{
for (int j=0;j<=v;j++)
{
if (w[i]>j)
{
f[i][j]=f[i-1][j];
}
else
{
动态转移方程。
}
}
}
cout<<f[n][v];
F是二维数组,可以画一个n*v的方格,枚举,输出最后答案,数组要定义大,
至于输入吧,注意题目,如果n和v都是0,则return 0;
输入先按老样子输入,最后int a,b,输入a和b(最后两个是多余的,0和0,但是要输入,否则算错!)
栾峻岩在2018-02-07 22:36:43追加了内容
不对,发错了……………………
1
栾峻岩
初级天翼
初级天翼
for (int i=1;i<=n;i++)
{
cin>>w[i];
c[i]=w[i];
v+=w[i];
}
v1=v/2;
然后就是01背包的语句了,(就是我刚刚发给你的那个。)
0