2 solutions

  • -1
    @ 2024-3-24 15:57:45
    using namespace std;
    int s,n,d,m,a[100000],b[100000],dp[100000];
    int main()
    {
    	cin>>s>>n>>d;
    	for(int i=1;i<=d;i++) cin>>a[i]>>b[i];
    	for(int i=1;i<=n;i++)
    	{
    		memset(dp,0,sizeof(dp));
    		m=s/1000;
    		for(int j=1;j<=d;j++)
    		{
    			for(int k=a[j]/1000;k<=m;k++) dp[k]=max(dp[k],dp[k-a[j]/1000]+b[j]);
    		}
    		s+=dp[m];
    	}
    	cout<<s;
    }
    
    • -3
      @ 2024-3-23 15:55:37
      #include <bits/stdc++.h>
      
      using namespace std;
      
      int bp[10][2],mmr[10][100000] = {0};
      
      int best(int slot,int lost,int a,int b){
      	if(slot >= a){
      		return 0;
      	}
      	if(mmr[slot][lost/1000] != 0){
      		return mmr[slot][lost/1000]-1;
      	}
      	if(lost - bp[slot][0] < 0){
      		return best(slot+1,lost,a,b);
      	}
      	mmr[slot][lost/1000] = max(best(slot,lost-bp[slot][0],a,b)+bp[slot][1],best(slot+1,lost,a,b)) + 1;
      	return mmr[slot][lost/1000]-1;
      }
      
      int main(){
      	int a,b,c;
      	cin >> b >> c >> a;
      	for(int i = 0;i < a;i++){
      		cin >> bp[i][0] >> bp[i][1];
      	}
      	for(int i = 0;i < c;i++){
      		b += best(0,b,a,b);
      	}
      	cout << b;
      	return 0;
      }
      
      //搜索做法
      
      • 1

      Information

      ID
      1029
      Time
      1000ms
      Memory
      128MiB
      Difficulty
      7
      Tags
      # Submissions
      57
      Accepted
      13
      Uploaded By