为什么优化成一维就过了??
查看原帖
为什么优化成一维就过了??
282189
Code_on_Cloud楼主2023/4/19 20:21

一开始是这样写的,提交只拿了60:

#include<iostream>
#include<vector>
using namespace std;
int main(){
    int V, n;
    cin >> V;
	cin >> n;
    vector<int> a(n + 1, 0);
    vector<vector<int>> dp(n + 1, vector<int>(V + 1, 0));
    
    for(int i = 1; i <= n; i ++) cin >> a[i];
    
    for(int i = 1; i <= n; i ++)
        for(int j = V; j >= a[i]; j --)
            dp[i][j] = max(dp[i-1][j], dp[i-1][j-a[i]] + a[i]);
    
    cout << V - dp[n-1][V];
}

迷惑之余,把它简化成了一维,然后没过的也都过了,请问这是为什么捏:

#include<iostream>
#include<vector>
using namespace std;
int main(){
    int V, n;
    cin >> V >> n;
    
    vector<int> a(n + 1, 0);
    vector<int> dp(V + 1, 0);
    
    for(int i = 1; i <= n; i ++) cin >> a[i];
    
    for(int i = 1; i <= n; i ++)
        for(int j = V; j >= a[i]; j --)
            dp[j] = max(dp[j], dp[j-a[i]] + a[i]);
    
    cout << V - dp[V];
}
2023/4/19 20:21
加载中...