裸的多维背包。。但本蒟蒻能看出多维背包但是写不出来。。
于是想了个骚办法,就是把多维背包强制成01背包。。
然后愉快的dp。。结果数据弱到跑完test总共才30ms。。
完全不科学的最后一次显示running on test 38,这么多数据居然总共加在一起才30ms。。
#include<iostream>
using namespace std;
int n,m,c0,d0,a,b,c,d,dou;
struct node
{
int c1,d1;
}bun[1000001];
int f[1001];
void read()
{
int i,j,last;
std::ios::sync_with_stdio(false);
cin>>n>>m>>c0>>d0;
for(i=1; i<=n/c0; i++)
{
bun[i].c1=c0;
bun[i].d1=d0;
}
last=n/c0;//处理白面团子
dou=last;
for(i=1; i<=m; i++)
{
cin>>a>>b>>c>>d;
for(j=last+1; j<=last+a/b; j++)//包子馅的限制
{
bun[j].c1=c;
bun[j].d1=d;
}
last=last+a/b;
}
// for(i=bun[1].c1; i<=n; i++)
// f[i]=bun[1].d1;
for(i=1; i<=last; i++)
for(j=n; j>=bun[i].c1; j--)
f[j]=max(f[j],f[j-bun[i].c1]+bun[i].d1);//选与不选
cout<<f[n];
return;
}
int main()
{
read();
return 0;
}
AC掉的。。