您的位置:首页 > 其它

千里码oj_老王装货

2015-12-13 11:17 295 查看
#include <iostream>

using namespace std;

struct DP
{
int weight;
bool mark[16];
}dp[5001];

int main()
{
int good[16] = {0, 509, 838, 924, 650, 604, 793, 564, 651,
697, 649, 747, 787, 701, 605, 644 };
int i,j,k,flag;
for(i=0; i<5001; ++i)
{
dp[i].weight = 0;
for(j=0; j<16; ++j)
dp[i].mark[j] = false;
}
for(i=1; i<16; ++i)
{
for(j=5000; j>=good[i]; --j)
{
if(dp[j].weight < dp[j-good[i]].weight + good[i])
{
dp[j].weight = dp[j-good[i]].weight + good[i];
for(k=1; k<16; ++k)
{
dp[j].mark[k] = dp[j-good[i]].mark[k];
}
dp[j].mark[i] = true;
}
}
}
flag = 1;
for(i=1; i<16; ++i)
{
if(flag && dp[5000].mark[i])
{
cout<<i;
flag = 0;
continue;
}
if(dp[5000].mark[i])
{
cout<<"-"<<i;
}
}
cout<<endl<<dp[5000].weight<<endl;
return 0;
}


简单0-1背包问题。。关键是如何输出装货号码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: