#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int inf = (1<<30)-1;
const int maxn = 100000;
int zeroOneBeg1(int n,int w[],int val[],int V)//01背包可以不装满
/*物品数,花费[],价值[],背包容量,物品下标1开始*/
{
int f[maxn],i,v;
for(i = 0; i <= V; i++)
f[i] = 0;
for(i = 1; i <= n; i++)
for(v = V; v >= 0; v--)
if(v - w[i] >= 0)
f[v] = max(f[v] , f[V-w[i]]+val[i]);
return f[V];
}
int zeroOneBeg2(int n,int w[],int val[],int V)//01背包恰好装满
/*物品数,花费[],价值[],背包容量,物品下标1开始*/
{
int f[maxn],i,v;
f[0] = 0;
for(i = 1; i <= V; i++)
f[i] = -inf;
for(i = 1; i <= n; i++)
for(v = V; v >= 0; v--)
if(v - w[i] >= 0)
f[v] = max(f[v] , f[V-w[i]]+val[i]);
return f[V];
}
int completeBeg(int n,int w[],int val[],int V)//完全背包
/*物品数,花费[],价值[],背包容量,物品下标1开始*/
{
int f[maxn],i,v;
/*f[0] = 0;
for(i = 1; i <= V; i++)
f[i] = -inf;*/
for(i = 0; i <= V; i++)
f[i] = 0;
for(i = 1; i <= n; i++)
for(v = 0; v <= V; v++)
if(v - w[i] >= 0)
f[v] = max(f[v] , f[V-w[i]]+val[i]);
return f[V];
}
int multipleBeg(int n,int w[],int val[],int nNum[],int V)//多重背包
/*物品数,花费[],价值[],物品的数量[],背包容量,物品下标1开始*/
{
int f[maxn],i,v;
for(i = 0; i <= V; i++)
f[i] = 0;
for(i = 1; i <= n; i++)
{
if( V <= w[i] * nNum[i])
{
for(v = 0; v <= V; v++)
if(v - w[i] >= 0)
f[v] = max(f[v] , f[V-w[i]]+val[i]);
}
else
{
int k = 1,count = nNum[i];
while(k < count)
{
for(v = V; v >= 0; v--)
if(v - k*w[i] >= 0)
f[v] = max(f[v] , f[V-k*w[i]]+k*val[i]);
count = count - k;
k = k * 2;
}
for(v = V; v >= 0; v--)
if(v - count*w[i] >= 0)
f[v] = max(f[v] , f[V-count*w[i]]+count*val[i]);
}
}
return f[V];
}
int main()
{
return 0;
}