01背包不是这么写的。。不能$j>=0$。。。
```
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
#include<queue>
#include<algorithm>
#include<stack>
using namespace std;
int n,m;
int c[3405],w[3405],f[12885];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>c[i]>>w[i];
for(int i=1;i<=n;i++)
for(int j=m;j>=c[i];j--)
f[j]=max(f[j],f[j-c[i]]+w[i]);
cout<<f[m]<<endl;
return 0;
}
```
这样差不多了吧qwq
by disangan233 @ 2018-10-13 10:05:06
@[EthanWu](/space/show?uid=28193)
应该是
```cpp
if(c[i]<=j)
{
f[i][j]=max(f[i-1][j],f[i-1][j-c[i]]+w[i]);
}
```
by 缥缈的鸿影 @ 2018-10-13 10:05:59
发现错误了……
```cpp
if(w[i]<=j)
```
应该是
```cpp
if(c[i]<=j)
```
2333
by EthanWu @ 2018-10-13 10:06:10
@[爱吃肉的瓶子](/space/show?uid=98606) 知道了,谢谢
by EthanWu @ 2018-10-13 10:06:50
@[EthanWu](/space/show?uid=28193) 这样好看点
```
#include<bits/stdc++.h>
using namespace std;
#define re register int
int n,m,c[3405],w[3405],f[12885];
char did;
#define ak *
inline int read()
{
re ioi=1,cz=0;did=getchar();
while(!isdigit(did))ioi=did=='-'?-1:ioi,did=getchar();
while(isdigit(did))cz=(cz<<3)+(cz<<1)+did-'0',did=getchar();
return cz ak ioi;
}
int main()
{
n=read(),m=read();
for(re i=1;i<=n;i++)
c[i]=read();w[i]=read();
for(re i=1;i<=n;i++)
for(re j=m;j>=c[i];j--)
f[j]=max(f[j],f[j-c[i]]+w[i]);
cout<<f[m]<<endl;
return 0;
}
```
by disangan233 @ 2018-10-13 10:08:04
你这个二维过不了
by 庄庄庄庄乜 @ 2018-10-13 10:08:08
应该要滚动数组优化,不然超内存,~~别问我怎么知道的,我刚刚去交了一下~~
by 庄庄庄庄乜 @ 2018-10-13 10:08:34
@[庄庄庄庄乜](/space/show?uid=85350) 哇发现大佬%%%
by disangan233 @ 2018-10-13 10:08:37
@[庄庄庄庄乜](/space/show?uid=85350) 01背包直接一维啊优化什么?
by disangan233 @ 2018-10-13 10:09:01
@[三体智子](/space/show?uid=60901) 头像233
by 夜刀神十香ღ @ 2018-10-13 10:09:55