Sicily 1146 采药

01背包,动态规划。

#include <iostream>
using namespace std;
int tab[101][1001];
int solve_dp( int t, int m ) {
    int w[101],v[101];
    int i,j;
    for ( i=1;i<=m;i++ )
        cin >> w[i] >> v[i];
    for ( i=0;i<=m;i++ ) {
        for ( j=0;j<=t;j++ ) {
            tab[i][j]=0;
        }
    }
    for ( i=1;i<=m;i++ ) {
        for ( j=1;j<=t;j++ ) {
            if ( w[i]<=j ) {
                if ( v[i]+tab[i-1][j-w[i]]>tab[i-1][j] )
                    tab[i][j]=v[i]+tab[i-1][j-w[i]];
                else 
                    tab[i][j]=tab[i-1][j];
            }   
            else 
                tab[i][j]=tab[i-1][j];
        }
    }
    return tab[m][t];
}
int main()
{
    int t,m,result;
    while ( cin >> t >> m ) {
        result = solve_dp(t,m);
        cout << result << endl;
    }
    return 0;
}

你可能感兴趣的:(Sicily 1146 采药)