4 条题解

  • 0
    #include <iostream>
    using namespace std;
    const int M=1e3+10;
    const int N=1e2+10;
    int w[N],c[N],dp[M];
    int main(){
    	int t,n;
    	cin>>t>>n;
    	for(int i=1;i<=n;i++)cin>>w[i]>>c[i];
    	for(int i=1;i<=n;i++){
    		for(int j=t;j>=w[i];j--){
    			dp[j]=max(dp[j],dp[j-w[i]]+c[i]);
    		}
    	}
    	cout<<dp[t]<<endl;
    	return 0;
    }
    
    • 0
      @ 2023-4-22 9:48:22
      #include <bits/stdc++.h>
      #include<iostream>
      using namespace std;
      int f[10001];//状态函数f[j]表示第i件物品容量为j最大价值
      int v[10001]; 
      int w[10001];
      /*
      函数功能:求0-1背包问题的最大价值
      函数形参:物品数量和背包容量
      函数返回值:返回最大值 
      */   
      int fun(int n,int m)
      {
      	for(int i=1;i<=n;i++)
      	{
      		for(int j=m;j>=w[i];j--)//逆序 
      		{
      			f[j]=max(f[j],f[j-w[i]]+v[i]);
      		}
      	}
      		return f[m];
      }
      int main()
      {
      	int n,m;
      	cin>>m>>n;
      	for(int i=1;i<=n;i++)
      		cin>>w[i]>>v[i];
      	cout<<fun(n,m);
      	return 0;
      }
      
      • 0
        @ 2021-10-31 9:53:55
        • 0
          @ 2021-10-6 19:48:35
          
          #include<bits/stdc++.h>
          using namespace std;
          int w[105], v[105];
          int dp[1005];
          int main()
          {
              int t,m;    
              cin>>t>>m;
              for(int i=1;i<=m;i++){
                 
                  cin>>w[i]>>v[i];
              }
              for(int i=1;i<=m;i++) 
              {
                  for(int j=t;j>=w[i];j--){
          		
                  
                     
                          dp[j]=max(dp[j-w[i]]+v[i], dp[j]);
                      
                  }
              }    
              cout<<dp[t];
              return 0;
          }
          
          • @ 2023-3-24 18:19:26

            浅浅格式化一下~

            #include<bits/stdc++.h>
            using namespace std;
            int w[105],v[105];
            int dp[1005];
            int main(){
                int t,m;    
                cin>>t>>m;
                for(int i=1;i<=m;i++){
                    cin>>w[i]>>v[i];
                }
                for(int i=1;i<=m;i++){
                    for(int j=t;j>=w[i];j--){
                        dp[j]=max(dp[j-w[i]]+v[i],dp[j]);
                    }
                }    
                cout<<dp[t];
                return 0;
            }
            
        • 1

        信息

        ID
        678
        时间
        1000ms
        内存
        256MiB
        难度
        4
        标签
        递交数
        192
        已通过
        83
        上传者