5 条题解

  • 1
    @ 2024-12-17 13:21:50
    #include <stdio.h>
    #include <iostream>
    using namespace std;
    inline int read(string n){
    	int x = 0, f = 1;
    	printf("%s", n.c_str());
    	char c = getchar();
    	while(c < '0'  ||  c > '9'){
    		if(c == '-')
    			f = -1;
    		c = getchar();
    	}
    	while(c >= '0'  &&  c <= '9'){
    		x = x * 10 + c - 48;
    		c = getchar();
    	}
    	return x * f;
    }
    inline float input(string n){
    	float x = 0, f = 1, x2 = 0, cnt = 0, i = 0;
    	printf("%s", n.c_str());
    	char c = getchar();
    	while(c < '0'  ||  c > '9'){
    		if(c == '-')
    			f = -1;
    		c = getchar();
    	}
    	while(c >= '0'  &&  c <= '9'){
    		x = x * 10 + c - 48;
    		c = getchar();
    	}
    	c = getchar();
    	while(c >= '0'  &&  c <= '9'){
    		x2 = x2 * 10 + c - 48;
    		cnt++;
    		c = getchar();
    	}
    	for(; i < cnt; i++)
    		x2 /= 10.0;
    	return (x + x2) * f;
    }
    void write(int n) {
        if(n < 0){
            putchar('-');
            n = -n;
        }
        if(n > 9)
    		write(n / 10);
        putchar(n % 10 + '0');
    	return;
    }
    void print(float n){
    	printf("%lf\n", n);
    	return;
    }
    int w[101], val[101];
    int dp[1001];
    int main(){
        int t = read(""), m = read(""), res = -1;
        for(int i=1;i<=m;i++)
            w[i] = read(""), val[i] = read("");
        for(int i = 1; i <= m; i++) 
        	for(int j = t; j >= 0; j--) 
                if(j >= w[i])
                    dp[j] = max(dp[j - w[i]] + val[i], dp[j]);
        write(dp[t]);
        return 0;
    }
    
    • -1
      #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;
      }
      
      • -1
        @ 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;
        }
        
        • -1
          @ 2021-10-31 9:53:55
          • -1
            @ 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
          标签
          递交数
          194
          已通过
          85
          上传者