可达信奥 - 登录 - 可达信奥https://kedaoi.cn/p/P0876
代码思路:
这道题可能一上来就要求最小体力,可惜这不是正解,最多40-50分。
正解: 01背包经典题
这道题就是求在不同重量(体力)下最多可以装多大价值(体积)的泥块,遍历,第一个合法就输出(简单,关键你得想到这个方向)
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4;
long long dp[N];
//01背包经典题
int main(){
int v,n,c; cin >> v >> n >> c;
for(int i = 1; i <= n; i++){
int a,b; cin >> a >> b;
for(int j = c; j >= b; j--){
dp[j] = max(dp[j],dp[j-b]+a); //求在不同体力下最大体积泥块
}
}
for(int i = 1; i <= c; i++){
if(dp[i] >= v){
cout << c-i << endl; //遍历求合法,第一个合法值即为最大剩余体力
return 0;
}
}
cout << "Impossible" << endl;
return 0;
}