P2430 严酷的训练
我的感想
第一遍没过原因:if (dp[j-times[que[i]]]+wei[i] >= dp[j])
中忽略了“=”号
第二遍没过原因:for (int j = limit; j >= times[que[i]]; j--)
中第二句写成了j>0
判断条件应当为:当时间满足将该题做完,故应为j >= times[que[i]]
AC代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main() {
int level1, level2, rate;
scanf("%d %d", &level1, &level2);
rate = level2 / level1;
int ques, know;
scanf("%d %d", &ques, &know);
int times[5050];
for (int i = 1; i <= know; i++){
scanf("%d", ×[i]);
times[i] *= rate;
}
int que[5050], wei[5050];
for (int i = 1; i <= ques; i++)
scanf("%d %d", &que[i], &wei[i]);
int limit;
int dp[5050];
memset(dp, 0, sizeof(dp));
scanf("%d", &limit);
for (int i = 1; i <= ques; i++){
for (int j = limit; j >= times[que[i]]; j--){
if (dp[j-times[que[i]]]+wei[i] >= dp[j])
dp[j] = dp[j-times[que[i]]]+wei[i];
}
}
printf("%d\n", dp[limit]);
return 0;
}