40 pts Code:
#include <cstdio>
long long dp[1010];
int main()
{
int n, x, loseW, winW, c;
scanf("%d %d", &n, &x);
for(int i = 1; i <= n; i++)
{
scanf("%d %d %d", &loseW, &winW, &c);
for(int j = x; j >= 0; j--)
{
dp[j] += loseW;//不管怎样,打输肯定赚
if((j >= c) && (dp[j - c] + winW > dp[j]))//如果可以打赢
dp[j] = dp[j - c] + winW;//看是否赚
}
}
printf("%lld", dp[x] * 5);
return 0;
}
AC Code:
#include <cstdio>
#include <algorithm>
long long dp[1010];
int main()
{
int n, x, loseW, winW, c;
scanf("%d %d", &n, &x);
for(int i = 1; i <= n; i++)
{
scanf("%d %d %d", &loseW, &winW, &c);
for(int j = x; j >= c; j--)
dp[j] = std::max(dp[j - c] + winW, dp[j] + loseW);//看打赢赚还是打输赚
for(int j = c - 1; j >= 0; j--)
dp[j] += loseW;//一定打输
}
printf("%lld", dp[x] * 5);
return 0;
}
都能过样例,不知道为什么分不一样