3 条题解

  • 0
    @ 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;
    }
    
    • 0
      @ 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
        @ 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
        标签
        (无)
        递交数
        63
        已通过
        39
        上传者