QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#689882 | #7739. Knapsack | i_love_qingyu# | RE | 0ms | 0kb | C++20 | 2.7kb | 2024-10-30 19:02:20 | 2024-10-30 19:02:24 |
answer
#include <bits/stdc++.h>
#define ll long long
using namespace std;
struct node{
long long int w;
int id;
bool operator <(const node &x)const{
return x.w<w;
}
};
priority_queue<node>q[40004];
long long v[40004],w[40004],dp[40004][5003];
priority_queue<int > p;
int main()
{
int n,m,k;
long long ans=0;
cin>>n>>m>>k;
for(int i=1;i<=n;i++)cin>>v[i]>>w[i];
for(int i=1;i<=n;i++)
for(int j=m;j>=1;j--){
for(int x=k;x>=1;x--)
dp[j][x]=max(dp[j][x-1]+w[i],max(dp[j][x],dp[j-v[i]][x]+w[i]));
if(j>=v[i])
dp[j][0]=max(dp[j-v[i]][0]+w[i],dp[j][0]);
}
for(int i=0;i<=m;i++)
for(int x=0;x<=k;x++)
ans=max(ans,dp[i][x]);
cout<<ans;
return 0;
}
/*
5 13 2
5 16
5 28
7 44
8 15
8 41
4 10 1
9 10
10 1
3 5
5 20
*/
// #include <bits/stdc++.h>
// #define ll long long
// using namespace std;
// int main()
// {
// int n,w,k;cin>>n>>w>>k;
// vector<vector<ll > > a(n+1,vector<ll >(2));
// for(int i=1;i<=n;++i) cin>>a[i][0] >> a[i][1];
// vector<vector<ll > > dp(n+1,vector<ll>(w+1));
// for(int i=1;i<=n;++i){
// for(int j=1;j<=w;++j){
// dp[i][j] = dp[i-1][j];
// if(j>=a[i][0]){
// dp[i][j] = max(dp[i][j],dp[i-1][j-a[i][0]]+a[i][1]);
// }
// }
// }
// vector<int> vis(n+1,0);
// for(int i=n,j=w;i>0;){
// if(dp[i][j] == dp[i-1][j]){
// i--;
// }else{
// vis[i] = 1;
// j-=a[i--][0];
// }
// }
// priority_queue<int> pq;
// for(int i=1;i<=n;++i){
// if(vis[i] == 0){
// pq.push(a[i][1]);
// }
// }
// ll ans = dp[n][w];
// while(k && !pq.empty()){
// k--;
// ans += pq.top();
// pq.pop();
// }
// //cout<<ans;
// sort(a.begin()+1,a.end(),[&](const vector<ll>& p1,const vector<ll>& p2)->bool{
// return p1[1]*p2[0] > p2[1]*p1[0];
// });
// ll ans2 = 0;
// for(int i=1;i<=min(k,n);++i) ans2 += a[i][1];
// vector<vector<ll > > b(1,vector<ll>(1));
// for(int i=k+1;i<=n;++i) b.push_back(a[i]);
// int nn = b.size()-1;
// vector<vector<ll > > dp1(nn+1,vector<ll>(w+1, 0));
// for(int i=1;i<=nn;++i){
// for(int j=0;j<=w;++j){
// dp1[i][j]=dp1[i-1][j];
// if(j>=b[i][0])
// dp1[i][j] = max(dp1[i][j],dp1[i-1][j-b[i][0]]+b[i][1]);
// }
// }
// ans2 += dp1[nn][w];
// cout<<max(ans2,ans)<<endl;
// return 0;
// }
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Runtime Error
input:
4 10 1 9 10 10 1 3 5 5 20