补题时有道题一直超时,后来把cout<<endl改成cout<<"\n"就过了
然后搜了下发现,用endl会清空缓冲区但效率会比"\n"低,平时还是用“\n”好
然后学习了dp,今天先学的01背包问题,
主要用于每个数只能选一次的情况,还有道将一个集合分成和相等的两个集合的例题,关系方程跟这题一样,就是容量变成数的总和sum/2,
优化后的一维,w重量,v价值,j是容量
for(int i=1;i<=n;i++)
{
for(int j=m;j>=w[i];j--)
{
f[j]=max(f[j],f[j-w[i]]+v[i]);
}
}
cout<<f[m]<<endl;
二维
for(int i=1;i<=4;i++)
{
for(int j=1;j<=8;j++)
{
if(w[i]>j)//装不了
{
f[i][j]=f[i-1][j];
}
else//装得了
{//可以装可以不装
f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i]);
}
}
}
cout<<f[4][8]<<endl;