动态规划,0-1背包问题
具体实现时可通过遍历顺序的改变降低时间复杂度。
状态转移方程:
开个坑先。。。
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
int t, m;
int med[100][2] = { 0 };
int dp[1000] = { 0 };
// dp[i]表示耗费i时间所得到的最优价值
void findans() {
int result = 0;
for (int i = 0; i < m; i++){
for (int j = t; j >= med[i][0]; --j) dp[j] = max(dp[j], dp[j - med[i][0]] + med[i][1]);
}
cout << dp[t] << endl;
}
int main(){
cin >> t >> m;
for (int i = 0; i < m; ++i) cin >> med[i][0] >> med[i][1];
findans();
return 0;
}