title Link:http://acm.uestc.edu.cn/#/problem/show/31
01 Backpack One eye question, there is nothing good to explain ...
Backpack capacity is m-5, leaving one of the most expensive not to count in 01 backpack, and finally buy.
Yes, I need <algorithm>.
#include <algorithm>#include <cstdio>#include <cstring>using namespace std;int n, m, p[1005];int opt[1005];int nextInt() {char c; while ((c = getchar()) < ‘0‘ || c > ‘9‘); int r = c - ‘0‘;while ((c = getchar()) >= ‘0‘ && c <= ‘9‘) (r *= 10) += c - ‘0‘;return r;}int main() {while (n = nextInt()) {memset(opt, 0, sizeof opt);for (int i = 1; i <= n; ++i)p[i] = nextInt();sort(p + 1, p + n + 1);m = nextInt();for (int i = 1; i < n; ++i)for (int j = m - 5; j >= p[i]; --j)if (opt[j - p[i]] + p[i] > opt[j])opt[j] = opt[j - p[i]] + p[i];if (m < 5) printf("%d\n", m);else printf("%d\n", m - opt[m - 5] - p[n]);}return 0;}
Cdoj 31 Rice Cards (card) Problem solving report