CODEVS 3269 混合揹包
一道裸的混合揹包題目,但是忘記了去重一直TLE,就是如果體積<=完全揹包的01,和多重揹包都要被完全揹包取代,因為他的數量沒限制所以用起來更方便。
題目連線:http://codevs.cn/problem/3269/
#include <iostream>
#include <string.h>
#include <cstdio>
#include <cstdlib>
using namespace std;
const int maxn = 210;
const int maxc = 200010;
inline int read()
{
char ch;
bool flag = false;
int a = 0;
while(!((((ch = getchar()) >= '0') && (ch <= '9')) || (ch == '-')));
if(ch != '-')
{
a *= 10;
a += ch - '0';
}
else
{
flag = true;
}
while(((ch = getchar()) >= '0') && (ch <= '9'))
{
a *= 10;
a += ch - '0';
}
if(flag)
{
a = -a;
}
return a;
}
void write(int a)
{
if(a < 0)
{
putchar('-');
a = -a;
}
if(a >= 10)
{
write(a / 10);
}
putchar(a % 10 + '0');
}
int f[maxc], v[maxn], w[maxn], m[maxn];
int n, V;
bool vis[maxn];
void complete_pack(int cost, int weight)
{
for(int j = cost; j <= V; j++)
f[j] = max(f[j], f[j-cost]+weight);
}
void zero_pack(int cost, int weight)
{
for(int j = V; j >= cost; j--)
f[j] = max(f[j], f[j-cost]+weight);
}
void multi_pack(int cost, int weight, int amount)
{
if(cost*amount >= V)
{
complete_pack(cost, weight);
return;
}
int k = 1;
while(k < amount)
{
zero_pack(cost*k, weight*k);
amount -= k;
k <<= 1;
}
zero_pack(amount*cost, amount*weight);
}
int main()
{
n = read();
V = read();
memset(vis, false, sizeof(vis));
for(int i=1; i<=n; i++)
{
v[i] = read();
w[i] = read();
m[i] = read();
}
for(int i = 1; i <= n; i++)
{
for(int j = i+1; j <= n; j++)
{
if(m[i] == 1)
{
if(m[j] == -1)if(v[i] >= v[j] && w[i] <= w[j]) vis[i] = true;
if(m[j] > 1)if(v[i] >= v[j] && w[i] <= w[j]) vis[i] = true;
}
else if(m[i] > 1)
{
if(m[j] == -1)
if(v[i] >= v[j] && w[i] <= w[j]) vis[i] = true;
}
}
}
for(int i=1; i<=n; i++)
{
if(m[i]==1 && !vis[i])
zero_pack(v[i], w[i]);
else if(m[i]==-1)
complete_pack(v[i], w[i]);
else if(!vis[i])multi_pack(v[i], w[i],m[i]);
}
write(f[V]);
return 0;
}
相關文章
- 揹包DP——混合揹包
- 01揹包、完全揹包、多重揹包詳解
- 揹包問題(01揹包與完全揹包)
- codevs 3372 選學霸(hash+並查集+多重揹包)dev並查集
- 揹包DP——完全揹包
- 分組揹包、完全揹包
- 揹包
- 01揹包、有依賴的揹包
- 01 揹包
- 揹包DP
- javascript演算法基礎之01揹包,完全揹包,多重揹包實現JavaScript演算法
- 揹包問題
- ACM 揹包問題ACM
- 01揹包問題
- dp-完全揹包
- 通天之分組揹包
- 01 揹包的變形
- 揹包問題大合集
- 揹包題型總結
- 從【零錢兌換】問題看01揹包和完全揹包問題
- 01揹包面試題系列(一)面試題
- JavaScript 揹包問題詳解JavaScript
- 動態規劃-揹包類動態規劃
- 01揹包空間優化優化
- Codevs1378選課[樹形DP|兩種做法(多叉轉二叉|樹形DP+分組揹包)---(▼皿▼#)----^___^]dev
- 用“揹包”去理解Go語言中的閉包Go
- 2. 揹包,佇列和棧佇列
- 01揹包問題的解決
- JavaScript中揹包問題(面試題)JavaScript面試題
- 揹包問題----動態規劃動態規劃
- 【動態規劃】揹包問題動態規劃
- 揹包問題例題總結
- 索泰釋出揹包PC VR神器VR
- Java實現-揹包問題IJava
- Java實現-揹包問題IIJava
- Java實現-揹包問題VIJava
- 揹包問題的演算法演算法
- P1757 通天之分組揹包