rt,为什么有人的二进制优化可以过,但是我的会TLE #36 #51,这个做法是否可行?
如果可行,求卡常。
code:
#include<bits/stdc++.h>
using namespace std;
int S,n;
long long v,w,k;
long long nv[10000002],nw[10000002],gp;
long long dp[10000002];
long long read()
{
char c=getchar();
long long num=0;
int fs=1;
while(!isdigit(c))
{
if(c=='-')
{
fs*=-1;
}
c=getchar();
}
while(isdigit(c))
{
num=num*10+(c-'0');
c=getchar();
}
return num*1ll*fs;
}
void out(long long x)
{
if(x<0)
{
x*=-1;
putchar('-');
}
if(x>=10)
{
out(x/10);
}
putchar('0'+(x%10));
}
int main()
{
S=read(),n=read();
gp=0;
long long j;
for(register int i=1;i<=n;i++)
{
v=read(),w=read(),k=read();
j=1;
while(j<=k)
{
nv[++gp]=j*v,nw[gp]=j*w;
k-=j;
j<<=1;
}
if(k)
{
nv[++gp]=k*v;
nw[gp]=k*w;
}
}
for(register int i=1;i<=gp;i++)
{
for(register int j=S;j>=nw[i];j--)
{
dp[j]=max(dp[j],dp[j-nw[i]]+nv[i]);
}
}
out(dp[S]);
return 0;
}