upord:戾气有点重啊。。。不过话说回来很多事情自己不经历是体会不到的
0 点赞 评论 收藏
分享
Leoric:const int MAX=500;
bool dp[MAX+1][MAX+1];
void beibao(int weight){
for(int i=MAX;i>=0;--i){
for(int j=MAX;j>=0;--j){
if(i>=weight&&dp[i-weight][j]){
dp[i][j]=true;
}
if(j>=weight&&dp[i][j-weight]){
dp[i][j]=true;
} }
}
}
int getNum(int* a,int n){
memset(dp,false,sizeof(dp));
dp[0][0]=true;
for(int i=0;i<n;++i) beibao(a[i]);
for(int i=MAX;i>=0;--i) if(dp[i][i]) return i;
} 早上想了一下,感觉可以用二重背包来写,要注意状态转移要从更大的状态开始操作,细节可参考上述代码。 复杂度为O(n*m^2) n最大为50,m最大为500。
0 点赞 评论 收藏
分享
关注他的用户也关注了: