1 条题解

  • 1
    @ 2025-10-10 0:31:22
    #include <iostream>
    #include <vector>
    #include <cmath>
    using namespace std;
    int main()
    {
        int n, v, i, j;
        cin >> n >> v;
        vector<pair<int, int>> item;
        for (i = 0; i < n; i++)
        {
            int vi, wi;
            cin >> vi >> wi;
            item.push_back({vi, wi});
        }
    
        // 初始化dp数组,dp[0] = 0,其他为INT_MIN(表示不可达)
        vector<int> dp(n + 1, INT_MIN);
        dp[0] = 0;
        
        for (i = 0; i < n; i++)
        {
            int vi = item[i].first;
            int wi = item[i].second;
            
        	for (j = v; j >= vi; j--)
    		{
    			if (dp[j - vi] != INT_MIN)
    			{
    				dp[j] = max(dp[j], dp[j - vi] + wi);
    			}
    		} 
        }
      
        // 如果dp[v]为INT_MIN,说明没有方案能装满背包,输出0;否则输出dp[v]
    	if (dp[v] == INT_MIN) 
    	{
            cout << 0 << endl;
        } 
    	else 
    	{
            cout << dp[v] << endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    157
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    3
    已通过
    2
    上传者