#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;

不是很难的动归题。不过要注意看题目。最多两个附件。

http://www.rqnoj.cn/Problem_6.html

posted on 2013-02-08 20:49  海暗  阅读(207)  评论(0编辑  收藏  举报