题目链接:
状态定义:f[i][j] 表示从前 i 个物品中选,音量能否到达 j , 1表示可以到达,0表示不能到达。
#include <cstdio> #include <cstring> #include <iostream> using namespace std; const int N = 1010; int n, s, e; int f[N][N]; int main() { int v; cin >> n >> s >> e; f[0][s] = 1; // 初始化 for (int i = 1; i <= n; i ++ ) { cin >> v; for (int j = e; j >= 0; j -- ) { if (j - v >= 0) f[i][j] |= f[i - 1][j - v]; if (j + v <= e) f[i][j] |= f[i - 1][j + v]; } } for (int j = e; j >= 0; j -- ) if (f[n][j]) { cout << j << endl; return 0; } cout << -1 << endl; return 0; }