#include<iostream> using namespace std; int v1,p,q,i,j,n,m,k,v[61][3]={},w[61][3]={},f[61][32001]; int main() { cin>>n>>m; for(i=1;i<=m;i++) { cin>>v1>>p>>q; if(q==0){v[i][0]=v1,w[i][0]=v1*p;} else if(v[q][1]==0){v[q][1]=v1,w[q][1]=v1*p;} else {v[q][2]=v1,w[q][2]=v1*p;} } for(i=1;i<=m;i++) for(j=1;j<=n;j+=1) { f[i][j]=f[i-1][j]; if(j>=v[i][0]&&f[i][j]<f[i-1][j-v[i][0]]+w[i][0]) f[i][j]=f[i-1][j-v[i][0]]+w[i][0]; if(j>=v[i][0]+v[i][1]&&f[i][j]<f[i-1][j-v[i][0]-v[i][1]]+w[i][0]+w[i][1]) f[i][j]=f[i-1][j-v[i][0]-v[i][1]]+w[i][0]+w[i][1]; if (j>=v[i][0]+v[i][2]&&f[i][j]<f[i-1][j-v[i][0]-v[i][2]]+w[i][0]+w[i][2]) f[i][j]=f[i-1][j-v[i][0]-v[i][2]]+w[i][0]+w[i][2]; if(j>=v[i][0]+v[i][1]+v[i][2]&& f[i][j]<f[i-1][j-v[i][0]-v[i][1]-v[i][2]]+w[i][0]+w[i][1]+w[i][2]) f[i][j]=f[i-1][j-v[i][0]-v[i][1]-v[i][2]]+w[i][0]+w[i][1]+w[i][2]; } cout<<f[m][n]; return 0; }
刚刚开始c++ 。只会用cin cout;
不是很难的动归题。不过要注意看题目。最多两个附件。