怪兽代码 线性复杂度
#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
int n;
cin>>n;
ll force_value[100];
int coin_value[100];
ll ans[101][101];// ans[i][j] 到达i位置,使用了j个金币,所能获得的最大体力
for(int j=0;j<=100;j++){
ans[0][j] = 0;
}
for(int i=1;i<=n;i++){
for(int j=0;j<=100;j++){
ans[i][j] = -1;
}
}
for(int i=1;i<=n;i++){
cin>>force_value[i];
}
for(int i=1;i<=n;i++){
cin>>coin_value[i];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=100;j++){
if (ans[i-1][j]>=force_value[i]){
ans[i][j] = max(ans[i][j], ans[i-1][j]);
}
if(j>=coin_value[i] && ans[i-1][j-coin_value[i]]!=-1)
ans[i][j] = max(ans[i][j], ans[i-1][j-coin_value[i]]+force_value[i]);
}
}
for(int i=1;i<=100;i++){
if(ans[n][i]!=-1){
cout<<i<<endl;
break;
}
}
system("pause");
return 0;
}