2 条题解

  • 0
    @ 2026-7-14 10:30:31
    # include <bits/stdc++.h>
    # define int long long
    using namespace std;
    const int N=1e5+5;
    int dp[N],n,m,w[N];
    signed main(){
    	cin>>m>>n;
    	for(int i = 1;i<=n;i++)
    		cin>>w[i];
    	for(int i = 1;i<=n;i++)
    		for(int j = m;j>=w[i];j--)
    				dp[j]=max(dp[j],dp[j-w[i]]+w[i]); 
    	cout<<dp[m];
    	return 0;
    }
    
    • 0
      @ 2025-4-17 21:47:52

      #include <bits/stdc++.h> using namespace std;

      int n, V; int v[1005], w[1005], s[1005];

      int main() { cin >> n >> V; for(int i = 1; i <= n; i++){ cin >> v[i] >> w[i] >> s[i]; }

      int dp[V + 5] = {0};
      for(int i = 1; i <= n; i++){
          if(s[i] == -1){ 
              for(int j = V; j >= v[i]; j--){
                  dp[j] = max(dp[j], dp[j - v[i]] + w[i]);
              }
          }else if(s[i] == 0){
              for(int j = v[i]; j <= V; j++){
                  dp[j] = max(dp[j], dp[j - v[i]] + w[i]);
              }
          }else{
              for(int k = 1; k <= s[i]; k++){
                  for(int j = V; j >= v[i]; j--){
                      dp[j] = max(dp[j], dp[j - v[i]] + w[i]);
                  }
              }
          }
      }
      
      cout << dp[V] << endl;
      return 0;
      

      }

      • 1

      信息

      ID
      3277
      时间
      1000ms
      内存
      256MiB
      难度
      4
      标签
      递交数
      33
      已通过
      18
      上传者