第三题多重背包加剪枝、 100% #include<iostream> using namespace std; int main(){     int m,n;     cin>>m>>n;     int a[55]={0};     int b[55]={0};     for(int i=0;i<m;i++){         cin>>a[i]>>b[i];     }     int dp[10005]={0};     dp[0]=1;          for(int i=0;i<m;i++){         for(int j=n;j>=a[i];j--){             for(int k=1;k<=b[i];k++){                 if(dp[j]==1) break;  //剪枝,没这句就0.8                  if(j-k*a[i]>=0){                     dp[j]|=dp[j-k*a[i]];                 }             }         }     }     for(int k=n;k>=0;k--){         if(dp[k]==1){             cout<<n-k<<endl;             return 0;         }     }     cout<<0<<endl; }
点赞 4

相关推荐

面了100年面试不知...:今年白菜这么多,冬天可以狂吃了
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务