[DP][HAOI2012]音量调节

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;
}


猜你喜欢

转载自blog.csdn.net/Binary_Heap/article/details/79193040