怪兽代码 线性复杂度

#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;
}