acgo题库
  • 首页
  • 题库
  • 题单
  • 竞赛
  • 讨论
  • 排行
  • 团队
  • 备赛专区

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
登录
注册
题目详情题解(0)讨论(0)提交记录(0)
  • 题解

    #include<iostream> using namespace std; int dp[900001],w[100001],c[100001],num[100001]; int main(){ int n,m,sum; cin>>m>>n; for(int i=1;i<=n;i++){ cin>>w[i]>>c[i]>>sum; if(sum==0){ num[i]=m/w[i]; }else{ num[i]=min(sum,m/w[i]); } }

    userId_undefined

    法兰西玫瑰

    倔强青铜
    65阅读
    0回复
    0点赞
  • 【正经题解】秒杀双十一

    userId_undefined

    AC君

    管理员
    倔强青铜
    41阅读
    0回复
    1点赞
  • 题解哦,亲

    userId_undefined

    fufu

    倔强青铜
    29阅读
    1回复
    0点赞
  • 看了法兰西大佬的解法后自己写的

    #include<iostream> using namespace std; int dp[10000],p[1000],c[1000],num[1000]; int n,m,x; int main(){ cin>>m>>n; for(int i=1;i<=n;i++){ cin>>p[i]>>c[i]>>x; if(x==0){ num[i]=m/p[i]; }else{ num[i]=min(x,m/p[i]); } } for(int i=1;i<=n;i++){ for(int k=1;k<=num[i];k++){ for(int j=m;j>=0;j--){ if(j>=p[i]){ dp[j]=max(dp[j],dp[j-p[i]]+c[i]); } } } } cout<<dp[m]; return 0; }

    userId_undefined

    霄

    荣耀黄金
    17阅读
    0回复
    0点赞
  • 混合背包

    #include<bits/stdc++.h> using namespace std; int n,m,v,w,c,dp[1005]; int main(){ scanf("%d%d",&m,&n); for(int i=1;i<=n;i++){ scanf("%d%d%d",&v,&w,&c); if(c0){//完全背包 for(int j=v;j<=m;j++){ dp[j]=max(dp[j],dp[j-v]+w); } } else if(c1){//01背包 for(int j=m;j>=v;j--){ dp[j]=max(dp[j],dp[j-v]+w); } } else{//多重背包 for(int j=1;c;j<<=1){ int x=min(j,c); for(int k=m;k>=vx;k--){ dp[k]=max(dp[k],dp[k-vx]+w*x); } c-=x; } } } printf("%d\n",dp[m]); return 0; }

    userId_undefined

    张栩晗

    倔强青铜
    3阅读
    0回复
    1点赞
首页