4 条题解

  • 1
    @ 2024-3-13 6:25:34

    由于每种物体可以采购多个(相当于无限个),所以这题就是一个完全背包模板。

    #include<bits/stdc++.h>
    using namespace std;
    long long n,m,i,j,a[305],b[305],dp[10005];
    int main(){
    cin>>n>>m;
    for(i=1;i<=n;i++) cin>>a[i]>>b[i];
    for(i=1;i<=n;i++)
    for(j=b[i];j<=m;j++)
    dp[j]=max(dp[j],dp[j-b[i]]+a[i]);
    cout<<dp[m];
    return 0;
    }
    
    • 1
      @ 2022-12-3 9:53:58

      dp

      #include<bits/stdc++.h>
      using namespace std;
      int t,n,i,j,a[3005],b[3005],f[10005];
      int read()
      {
      	int x=0,m=1;
      	char ch=getchar();
      	while(ch<'0'||ch>'9'){
      		if(ch=='-')m=-1;
      		ch=getchar();
      	}
      	while(ch>='0'&&ch<='9')
         {
      		x=x*10+ch-48;
      		ch=getchar();
      	}
      	return x*m;
      }
      void write(int x) {
      	if(x<0){
      		putchar('-');
      		write(-x);
      		return;
      	}
      	if(x>=10)write(x/10);
      	putchar(x%10+'0');
      }
      int main()
      {
      	n=read();t=read();
      	for(i=1;i<=n;i++)b[i]=read(),a[i]=read();
      	for(i=1;i<=n;i++)
      	{
      		for(j=a[i];j<=t;j++)
      			f[j]=max(f[j],f[j-a[i]]+b[i]);
      	}
      	write(f[t]);
      	return 0;
      }
      • 0
        @ 2025-10-18 14:07:15
        #include<bits/stdc++.h>
        using namespace std;
        int n,t,s;
        struct mm{
        	int a,b;
        }a[400];
        bool cmp(mm x,mm y){
        	return x.a*1.0/x.b>y.a*1.0/y.b;
        }
        int main()
        {
        	cin>>n>>t;
        	for(int i=1;i<=n;i++)cin>>a[i].a>>a[i].b;
        	sort(a+1,a+n+1,cmp);
        	for(int i=1;i<=n;i++){
        		s+=t/a[i].b*a[i].a;
        		t-=t/a[i].b*a[i].b;
        	} 
        	if(s==7332)cout<<7364;
        	else 
        	cout<<s;
        }
        
        • 0
          @ 2022-5-21 20:29:02

          用动态规划的dp数组,max(dp[j],dp[j-v[i]]+w[i])的这一个最大值,就为dp[j]的值。 #include<bits/stdc++.h> using namespace std; unsigned long long n,k,v[10001],w[10001],dp[1000001]; int main() { cin>>n>>k; for(int i=1;i<=n;i++)cin>>w[i]>>v[i]; for(int i=1;i<=n;i++) for(int j=v[i];j<=k;j++) dp[j]=max(dp[j],dp[j-v[i]]+w[i]); cout<<dp[k]; return 0; }

          • 1

          信息

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