【发布时间】:2015-10-12 12:38:28
【问题描述】:
给定:一个二维数组,值 K 和 M
问题:使用恰好 M 个元素,使用所有行(即每行应该有一个元素)找到小于或等于 K 的最大可能总和。
这是一个程序的 sn-p,我无法实现每行和 M 的条件。
for (int i = 0 ; i<n ; i++)
for (int s=0; s<M; s++)
for (int j=K;j>=0;j--)
if (dp[s][j] && A[i] + j < K)
dp[s + 1][j + A[i]] = true;
编辑 1:Rows = M ,即必须从每一行中选择一个元素。
编辑 2:动态编程解决方案,感谢 @6502
ill ret(V(ill) col[101],ill prec[][101],ill s,ill row,ill m,ill k)
{
if(prec[s][row])
return prec[s][row];
else
{
if(row==m+1)
return s;
ill best=-1;
int j=row;
for(int i=0;i<col[j].size();i++)
{
if(s+col[j][i] <= k)
{
ill x = ret (col,prec,s+col[j][i],row+1,m,k);
if ((best==-1)||(x>best))
best=x;
}
}
prec[s][row]=best;
return best;
}
}
【问题讨论】:
-
矩阵有多少行?如果它的行数少于 M 怎么办?我们能满足条件吗?
-
@svs 行总是等于 M ,即。 e 必须从每一行中选择一个元素
-
有什么限制吗? K 和 M 有多大?
-
@PhamTrung 1 ≤ M ≤ 100 1 ≤ K ≤ 10000
标签: c++ algorithm dynamic-programming