题意:
n个背包,有的可以拆分,有的不能拆。给定Weight求最大值。
思路:
离散和连续的分别求一下。然后枚举i,W-i
class TreasuresPacking
{
public:
double maximizeCost(vector <string> treasures, int W)
{
vector dis, con;
for (int i=0;istringstream ss;ss << treasures[i];
int w, v;char flag;
ss >> w >> v >> flag;
if (flag == 'Y') {
con.push_back( (node) {w, v} );
}
else
dis.push_back( (node) {w, v} );
}
sort(con.begin(), con.end(), comp);
vector<double> fcon(W+1);
int sum = 0, ok = 1;
for (int i=0;idouble f = con[i].v*1.0/con[i].w;
for (int j=0;jif (sum > W) {
ok = 0;break;
}
fcon[sum] = fcon[sum-1] + f;
}
}
vector<int> fdis(W+1);
for (int i=0;ifor (int j=W;j>=dis[i].w;--j)
fdis[j] = max (fdis[j], fdis[j-dis[i].w] + dis[i].v);
double ans = 0;
for (int i=0;i<=W;++i) ans = max (ans, fdis[i] + fcon[W - i]);
return ans;
}
};