月离 @ 2019-02-16 10:11:34
using namespace std; int n,m; int c[100000][5]; int w[100000][5]; int ans=0; int f[100000]; int main(){ cin>>m>>n; for(int i=1;i<=n;i++){ int ww,cc,pp; cin>>ww>>cc>>pp; if(pp==0){ c[i][0]=cc; w[i][0]=ww; c[i][0]=w[i][0]c[i][0]; } if(pp!=0){ if(w[pp][1]==0){ c[pp][1]=cc; w[pp][1]=ww; c[i][1]=w[i][1]c[i][1]; } else{ c[pp][2]=cc; w[pp][2]=ww; c[i][2]=w[i][2]*c[i][2]; } } } for(int i=1;i<=n;i++){ for(int j=m;j>=0;j--){ if(j>=w[i][0]&&j<=w[i][0]+w[i][1]||j<=w[i][0]+w[i][2]){ f[i]=max(f[i],f[j-w[i][0]]+c[i][0]); } if(j>=w[i][0]+w[i][1]&&j<=w[i][0]+w[i][1]+w[i][2]){ f[i]=max(f[i],f[j-w[i][0]-w[i][1]]+c[i][0]+c[i][1]); } if(j>=w[i][0]+w[i][2]&&j<=w[i][0]+w[i][1]+w[i][2]){ f[i]=max(f[i],f[j-w[i][0]-w[i][2]]+c[i][0]+c[i][2]); } if(j>=w[i][0]+w[i][1]+w[i][2]){ f[i]=max(f[i],f[j-w[i][0]-w[i][1]-w[i][2]]+c[i][0]+c[i][1]+c[i][2]); } } } cout<<f[m];
return 0;
}
by wwlw @ 2019-02-16 10:12:55
by 月离 @ 2019-02-16 10:13:02
#include<iostream>
#include<cstring>
using namespace std;
int n,m;
int c[100000][5];
int w[100000][5];
int ans=0;
int f[100000];
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++){
int ww,cc,pp;
cin>>ww>>cc>>pp;
if(pp==0){
c[i][0]=cc;
w[i][0]=ww;
c[i][0]=w[i][0]*c[i][0];
}
if(pp!=0){
if(w[pp][1]==0){
c[pp][1]=cc;
w[pp][1]=ww;
c[i][1]=w[i][1]*c[i][1];
}
else{
c[pp][2]=cc;
w[pp][2]=ww;
c[i][2]=w[i][2]*c[i][2];
}
}
}
for(int i=1;i<=n;i++){
for(int j=m;j>=0;j--){
if(j>=w[i][0]&&j<=w[i][0]+w[i][1]||j<=w[i][0]+w[i][2]){
f[i]=max(f[i],f[j-w[i][0]]+c[i][0]);
}
if(j>=w[i][0]+w[i][1]&&j<=w[i][0]+w[i][1]+w[i][2]){
f[i]=max(f[i],f[j-w[i][0]-w[i][1]]+c[i][0]+c[i][1]);
}
if(j>=w[i][0]+w[i][2]&&j<=w[i][0]+w[i][1]+w[i][2]){
f[i]=max(f[i],f[j-w[i][0]-w[i][2]]+c[i][0]+c[i][2]);
}
if(j>=w[i][0]+w[i][1]+w[i][2]){
f[i]=max(f[i],f[j-w[i][0]-w[i][1]-w[i][2]]+c[i][0]+c[i][1]+c[i][2]);
}
}
}
cout<<f[m];
return 0;
}
这粘贴有毒
by 吴勉之 @ 2019-02-16 10:21:50
by 月离 @ 2019-02-16 11:01:56
代码如下
#include<iostream>
#include<cstring>
using namespace std;
int n,m;
int c[100000][5];
int w[100000][5];
int ans=0;
int f[100000];
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++){
int ww,cc,pp;
cin>>ww>>cc>>pp;
if(pp==0){
c[i][0]=cc;
w[i][0]=ww;
c[i][0]=w[i][0]*c[i][0];
}
if(pp!=0){
if(w[pp][1]==0){
c[pp][1]=cc;
w[pp][1]=ww;
c[pp][1]=ww*cc;
}
else{
c[pp][2]=cc;
w[pp][2]=ww;
c[pp][2]=ww*cc;
}
}
}
for(int i=1;i<=n;i++){
for(int j=m;j>=0;--j){
if(j>=w[i][0]){
f[j]=max(f[j],f[j-w[i][0]]+c[i][0]);
}
if(j>=w[i][0]+w[i][1]){
f[j]=max(f[j],f[j-w[i][0]-w[i][1]]+c[i][0]+c[i][1]);
}
if(j>=w[i][0]+w[i][2]){
f[j]=max(f[j],f[j-w[i][0]-w[i][2]]+c[i][0]+c[i][2]);
}
if(j>=w[i][0]+w[i][1]+w[i][2]){
f[j]=max(f[j],f[j-w[i][0]-w[i][1]-w[i][2]]+c[i][0]+c[i][1]+c[i][2]);
}
}
}
cout<<f[m];
return 0;
}
心累