讨论 / 边界初始化问题
code_beauty 2010-02-22 01:38:00
点我顶贴 收藏 删除
#include <iostream>

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;

}

#1 sunjing@2010-02-22 01:38:00
回复 删除
dp[0][0] = 0;与for( int i = 0;i <= m;++i )

dp[i][0] = 0;

for( int i = 0;i <= l;++i )

dp[0][i] = 0;

不是等效的,怎么可以换啊?dp[0][0] = 0;只代表后者的i=0时的情况!!而i!=0时的情况你就没有考虑了!!!

查看更多回复
提交回复