水题啊水题,我老是被水题虐,果然我还是弱菜啊。。。
明明想出动态转移方程了,是01背包的变形,分组背包下就可以了,我好像想复杂了,在循环里面各种取最大值最小值。。。
上传上去总输出无结果,本地完全没问题的啊,我各种改数组,去头文件什么的,没有丝毫变化。。。Orz太打击人了。。。
最后还是用分组数组A过。。。
#include <cstdio> #define maxn 1080010 int dp[maxn] = {0}; inline int min(int a, int b){ return a > b ? b : a; } inline int max(int a, int b){ return a > b ? a : b; } int main() { int n, t; int w1, t1, w2, t2; int i, j; scanf("%d%d", &n, &t); for (i = 1; i <= n; i++) { scanf("%d%d%d%d", &w1, &t1, &w2, &t2); for (j = t; j >= min(t1, t2); j--) { if (j >= t1) dp[j] = max(dp[j], dp[j - t1] + w1); if (j >= t2) dp[j] = max(dp[j], dp[j - t2] + w2); } } printf("%d\n", dp[t]); return 0; }