2 条题解

  • 1
    @ 2024-11-1 23:11:42

    用c++提交,不过还是c语言的写法,不会的可以去看01背包问题

    #include <stdio.h>

    #include <algorithm>

    using namespace std;

    int main()

    {

    int n,m;

    scanf("%d %d",&n,&m);

    int dp[100][1001];

    int t[10017],v[1001];

    for(int i=0;i<m;i++){

    scanf("%d %d",&t[i],&v[i]);

    }

    for(int i=0;i<=m;i++){

    for(int j=n;j>=0;j--){

    if(j>=t[i]){

    dp[i][j]=max(dp[i-1][j],dp[i-1][j-t[i]]+v[i]);

    }else{

    dp[i][j]=dp[i-1][j];

    }

    }

    }

    printf("%d\n",dp[m][n]);

    return 0;

    }

    • 0
      @ 2025-10-5 15:40:39
      01背包
      #include<iostream>
      #include<algorithm>
      using namespace std;
      int dp[25][20005];
      //自动初始化,只用一次
      int main()
      {
      	int n,t;
      	cin>>n>>t;
      	int zan,jia;
      	for(int i=1;i<=t;i++)
      	{
      		cin>>zan>>jia;
      		for(int j=0;j<=n;j++)
      		{
      			if(zan>j)
      			{
      				dp[i][j]=dp[i-1][j];
      			}
      			else
      			{
      				int a=dp[i-1][j];
      				int b=dp[i-1][j-zan]+jia;
      				dp[i][j]=max(a,b);
      			}
      		}
      	}
      	cout<<dp[t][n];
      	return 0;
      }
      
      • 1

      信息

      ID
      224
      时间
      1000ms
      内存
      256MiB
      难度
      8
      标签
      递交数
      321
      已通过
      42
      上传者