嗯...
题目链接:https://www.luogu.org/problemnew/show/P1048
这是一道典型的01背包问题(有代价,有价值),其动态转移方程为:
AC代码:
1 #include<cstdio> 2 #include<iostream> 3 4 using namespace std; 5 6 int ti[10005], val[10005], dp[10005]; 7 8 int main(){ 9 int t, m; 10 scanf("%d%d", &t, &m); 11 for(int i = 1; i <= m; i++) 12 scanf("%d%d", &ti[i], &val[i]); 13 for(int i = 1; i <= m; i++){ 14 for(int j = t; j >= 0; j--)//倒叙枚举{ 15 if(j >= ti[i])//比较时间是否可以 16 dp[j] = max(dp[j - ti[i]] + val[i], dp[j]);//动态转移方程 17 } 18 } 19 printf("%d ", dp[t]); 20 return 0; 21 }