using namespace std;
const int _DEF_MINNUM = -1234567;
int main()
{
int n,m,l;
cin >> n >> m >> l;
int time[100],like[100];
for( int i = 0;i < n;++i )
cin >> time[i] >> like[i];
int dp[101][1001];
for( int i = 0;i <= m;++i )
{
for( int j = 0;j <= l;++j )
dp[i][j] = _DEF_MINNUM;//_DEF_MINNUM;
}
dp[0][0] = 0;
/*这里 为什么我把dp[0][0]换成
for( int i = 0;i <= m;++i )
dp[i][0] = 0;
for( int i = 0;i <= l;++i )
dp[0][i] = 0;
就过不去了
*/
for( int i = 0;i < n;++i )
{
for( int j = m;j >= 1;--j )
{
for( int k = l;k >= time[i];--k )
{
if( dp[j-1][k-time[i]]+like[i] > dp[j][k] )
dp[j][k] = dp[j-1][k-time[i]]+like[i];
}
}
}
int tmax = _DEF_MINNUM;
for( int i = 1;i <= l;++i )
if( dp[m][i] > tmax )
tmax = dp[m][i];
if( tmax < 0 )
cout << 0;
else
cout << tmax;
return 0;
}
dp[i][0] = 0;
for( int i = 0;i <= l;++i )
dp[0][i] = 0;
不是等效的,怎么可以换啊?dp[0][0] = 0;只代表后者的i=0时的情况!!而i!=0时的情况你就没有考虑了!!!