hdu-2191(完全背包+二进制优化模板)

时间:2023-03-09 00:14:50
hdu-2191(完全背包+二进制优化模板)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191

思路:完全背包模板

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,dp[],p,h,c;
void zerof(int cost,int val)
{
for(int i=n;i>=cost;i--)
dp[i]=max(dp[i],dp[i-cost]+val);
}
void completf(int cost,int val)
{
for(int i=cost;i<=n;i++)
dp[i]=max(dp[i],dp[i-cost]+val);
}
void Mul(int cost,int val,int num)
{
if(cost*num>=n) completf(cost,val);
else
{
for(int i=;i<=num;i*=)
{
zerof(i*cost,i*val);
num-=i;
}
zerof(num*cost,num*val);
}
}
int main(void)
{
int i,j,k,t;
cin>>t;
while(t--)
{
cin>>n>>m;
memset(dp,,sizeof(dp));
for(i=;i<m;i++)
{
cin>>p>>h>>c;
Mul(p,h,c);
}
printf("%d\n",dp[n]);
}
return ;
}