您的位置:首页 > 其它

01背包问题(两种状态)UVa-12563 - Jin Ge Jin Qu hao

2017-05-22 22:06 591 查看
原题 https://vjudge.net/problem/UVA-12563

对于每移动一步都有两种状态,创建了两个数组来维护状态进行状态转移,也可用一个结构体,这两种状态为结构体的成员函数类似于http://blog.csdn.net/u013480600/article/details/40376143的思路

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int time_[5555] = {0};
int dp[255555] = {0};

int main()
{
int n;
while (cin >> n && n != -1)
{
memset(time_, 0, sizeof(time_));
memset(dp, 0, sizeof(dp));
int index = 0;
int len = 0;
while (n--)
{
int v, c;
cin >> v >> c;
len += v * c;
{
time_[index++] = v;
}
while (c--)

}
for (int i = 0; i < index; i++)
{
for (int j = len / 2; j >= time_[i]; j--)
// for (int j = 0; j <= len / 2; j++)
{
dp[j] = max(dp[j], dp[j - time_[i]] + time_[i]);
}
}

cout << len - dp[len / 2] << " " << dp[len / 2] << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: