题意分析
暴力DP + bitset 优化
代码总览
#include<bits/stdc++.h>
using namespace std;
int n,s;
int h[105];
int main(){
scanf("%d",&n);
for(int i = 1;i<=n;++i) scanf("%d",&h[i]),s+=h[i];
bitset<3000> dp[3000];
for(int i = 0;i<=s;++i) dp[i].reset();
dp[0].set(1);
for(int i = 1;i<=n;++i)
for(int j = s;j>=0;--j)
if(dp[j].any()){
dp[j+h[i]] = dp[j] | dp[j+h[i]];
dp[j] = dp[j] | (dp[j] << h[i]);
}
int ans = 0;
for(ans = s;ans>0;ans--)
if(dp[ans].test(ans+1)) break;
if(ans) printf("%d\n",ans);
else printf("Impossible\n");
return 0 ;
}
本文介绍了一种结合暴力动态规划与bitset优化技术解决特定问题的方法。通过使用bitset进行状态压缩,有效减少了内存消耗并提高了运行效率。
556

被折叠的 条评论
为什么被折叠?



