[DP][HAOI2012]音量调节
2018-01-29 12:08
423 查看
BZOJ原题 洛谷原题
【解法】用F[i][j]表示i之前能达到j音量
F[i][j] = F[i-1][j+A[i]] || F[i-1][j-A[i]];(自行处理if)
另外一维可以压缩一下。应该可以压缩成F[2][10010]。
【code】
#include <iostream>
using namespace std;
int A[101];
bool F[101][10010];
int N, S, Max, ans;
int main() {
ans = -1;
cin >> N >> S >> Max;
for(int i=1; i<=N; i++) cin >> A[i];
F[0][S] = 1;
for(int i=1; i<=N; i++) {
for(int j=0; j<=Max; j++) {
if((j + A[i] <= Max && F[i-1][j + A[i]]) || (j >= A[i] && F[i-1][j-A[i]]))
F[i][j] = 1;
if(i == N && F[i][j]) ans = j;
}
}
cout << ans << endl;
return 0;
}
【解法】用F[i][j]表示i之前能达到j音量
F[i][j] = F[i-1][j+A[i]] || F[i-1][j-A[i]];(自行处理if)
另外一维可以压缩一下。应该可以压缩成F[2][10010]。
【code】
#include <iostream>
using namespace std;
int A[101];
bool F[101][10010];
int N, S, Max, ans;
int main() {
ans = -1;
cin >> N >> S >> Max;
for(int i=1; i<=N; i++) cin >> A[i];
F[0][S] = 1;
for(int i=1; i<=N; i++) {
for(int j=0; j<=Max; j++) {
if((j + A[i] <= Max && F[i-1][j + A[i]]) || (j >= A[i] && F[i-1][j-A[i]]))
F[i][j] = 1;
if(i == N && F[i][j]) ans = j;
}
}
cout << ans << endl;
return 0;
}
相关文章推荐
- bzoj-2748 2748: [HAOI2012]音量调节(dp)
- BZOJ 2748: [HAOI2012]音量调节( dp )
- bzoj2748 [HAOI2012]音量调节(dp水)
- [luoguP1877] [HAOI2012]音量调节(DP)
- [BZOJ][HAOI2012][背包DP]音量调节
- 【bzoj2748】 HAOI2012音量调节 背包dp
- 大暴力——[HAOI]2012音量调节
- P1877 [HAOI2012]音量调节
- [BZOJ2748] [HAOI2012]音量调节
- bzoj2748 [HAOI2012]音量调节
- bzoj2748 [HAOI2012]音量调节
- Bzoj 2748: [HAOI2012]音量调节 动态规划
- BZOJ2748 [HAOI2012]音量调节
- bzoj2748:[HAOI2012]音量调节
- [BZOJ2748][HAOI2012]音量调节
- 【bzoj2748】[HAOI2012]音量调节
- 2748: [HAOI2012]音量调节
- P1877 [HAOI2012]音量调节
- bzoj2748: [HAOI2012]音量调节
- 【动态规划】【记忆化搜索】【dfs】bzoj2748 [HAOI2012]音量调节