01背包 样例都没过??!

P2871 [USACO07DEC] Charm Bracelet S

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


| 下一页