3 条题解

  • 9
    @ 2024-5-16 13:48:29

    代码如下

    参考代码
    #include <bits/stdc++.h>
    using namespace std;;
    int m,n,a[5000],f[5000];
    vector<int> num[5000];
    int main(){
        cin >> n >> m;
        for(int i = 1;i <= n;i++){
            cin >> a[i];
        }
        for(int i = 1;i <= n;i++){
            for(int j = m;j >= a[i];j--){
                if(f[j-a[i]]+a[i] > f[j]){//需要注意本题01背包问题中,物品的价值等于物品的体积。
                    f[j] = f[j-a[i]]+a[i];
                    num[j] = num[j-a[i]];
                    num[j].push_back(i);
                }
            }
        }
        cout << m-f[m] << endl;
        for(int i = 0;i < num[m].size();i++){
            cout << num[m][i] << ' ';
        }
        return 0;
    }
    

    一个赞抱走

    • 4
      @ 2023-11-11 22:48:14
      #include <bits/stdc++.h>
      using namespace std;
      int n,m,a[105],f[2005];
      vector<int> ans[2005];
      int main(){
          cin >> n >> m;
          for(int i=1;i<=n;i++) cin >> a[i];
          f[0]=0;
          for(int i=1;i<=n;i++)
              for(int j=m;j>=a[i];j--)
                  if(f[j-a[i]]+a[i]>f[j]){
                      f[j]=f[j-a[i]]+a[i];
                      ans[j]=ans[j-a[i]];
                      ans[j].push_back(i);
                  }
      	cout << m-f[m] << endl;
          for(unsigned int i=0;i<ans[m].size();i++)
              cout << ans[m][i] << " ";
          return 0;
      }
      
      • 3
        @ 2023-8-20 18:35:39

        本题是01背包路径存储的变形题,需要注意本题01背包问题中,物品的价值等于物品的体积。

        参考代码
        for (int i = 1; i <= n; i++)//遍历物品
            {
        		for (int j = m; j >= v[i]; j--)//倒序遍历箱子容量
        		{
        			if (f[j - v[i]] + v[i] > f[j])
        			{
        				f[j] = f[j - v[i]] + v[i];
        				bh[j] = bh[j - v[i]];
        				bh[j].push_back(i);
        			}
        		}
        	}
        
        • 1

        信息

        ID
        383
        时间
        1000ms
        内存
        256MiB
        难度
        2
        标签
        (无)
        递交数
        342
        已通过
        205
        上传者