//===============================================================================
//
//> Author : flowertree
//> About : poj 1742
//> Time : 2015.12.28
//> Algorithm : 多重背包 楼天成男人八题
// : 完全背包转换为 01背包 多重背包转换为 完全背包
//
//===============================================================================
#include <iostream>
#include <string.h>
using namespace std;
#define MAX 100005
#define M 105
int w[M], num[M], tempnum[MAX];
bool flag[MAX];
int main()
{
int n, V;
while(cin >> n >> V, n && V)
{
int sum = 0;
memset(flag, false, sizeof(flag));
flag[0] = true;
for(int i = 1; i <= n; i++)
cin >> w[i];
for(int i = 1; i <= n; i++)
cin >> num[i];
for(int i = 1; i <= n; i++) //在完全背包基础上扩充几点,tempnum存储当前空间内使用第i个物品的数量
{
memset(tempnum, 0, sizeof(tempnum));
for(int v = w[i]; v <= V; v++)
{
if(flag[v - w[i]] && (tempnum[v - w[i]] < num[i]) && (!flag[v]))
{
tempnum[v] = tempnum[v - w[i]] + 1;
sum++;
flag[v] = true;
}
}
}
cout << sum << endl;
}
system("pause");
return 0;
}
poj 1742 多重背包 男人八题之一
最新推荐文章于 2021-02-23 16:08:32 发布