单纯问问,为什么题解里说这题需要 二进制优化,要不然普通的混合背包之能得80分?
可是我用普的算法也可以(应该没有优化)
代码如下:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int n,dp[102505],w[60230],v[60330],s[6230],ns,nf,es,ef;
int main()
{
scanf("%d:%d%d:%d%d",&ns,&nf,&es,&ef,&n);
int m=(es*60+ef)-(ns*60+nf);
for(int i=1;i<=n;i++)
{
cin>>v[i]>>w[i]>>s[i];
}
for(int i=1;i<=n;i++)
{
if(s[i]==1)
{
for(int j=m;j>=v[i];j--)
{
dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
}
}
else if(s[i]==0)
{
for(int j=v[i];j<=m;j++)
{
dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
}
}
else if(s[i]>1)
{
for(int j=m;j>=v[i];j--)
{
for(int k=1;k<=s[i]&&j>=k*v[i];k++)
{
dp[j]=max(dp[j],dp[j-k*v[i]]+k*w[i]);
}
}
}
}
printf("%d",dp[m]);
return 0;
}
求解.........