2 solutions
-
-1
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
#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