zoukankan      html  css  js  c++  java
  • HDU 1114 PiggyBank

    利用传统的完全背包解法会超时,下面代码超时

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 
     5 #define INF 1<<30
     6 using namespace std;
     7 
     8 int main(){
     9     int T;
    10     cin >> T;
    11     while(T--){
    12         int E,F;
    13         cin >>E>>F;
    14         int pigWeight =F-E;
    15         int n;
    16         cin >> n;
    17         vector<int> p(n),w(n);
    18         for(int i = 0; i < n; i ++ ){
    19             cin >> p[i]>>w[i];
    20         }
    21         vector<int> dp(pigWeight+1,INF);
    22         dp[0]=0;
    23         for(int i = 0; i < n; i ++ ){
    24             for(int j = w[i]; j <= pigWeight; j ++){
    25                 for(int k =0; k <= j/w[i]; k ++){
    26                     dp[j] = min(dp[j],dp[j-w[i]]+p[i]);
    27                 }
    28             }
    29         }
    30         if(dp[pigWeight] == INF) cout<<"This is impossible."<<endl;
    31         else cout<<"The minimum amount of money in the piggy-bank is "<<dp[pigWeight]<<"."<<endl;
    32 
    33     }
    34 
    35     return 0;
    36 }

    需要对完全背包进行优化,具体参考背包九讲 和 http://blog.csdn.net/wumuzi520/article/details/7014830

     优化后代码

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 
     5 #define INF 1<<30
     6 using namespace std;
     7 
     8 int main(){
     9     int T;
    10     cin >> T;
    11     while(T--){
    12         int E,F;
    13         cin >>E>>F;
    14         int pigWeight =F-E;
    15         int n;
    16         cin >> n;
    17         vector<int> p(n),w(n);
    18         for(int i = 0; i < n; i ++ ){
    19             cin >> p[i]>>w[i];
    20         }
    21         vector<int> dp(pigWeight+1,INF);
    22         dp[0]=0;
    23         for(int i = 0; i < n; i ++ ){
    24             for(int j = w[i]; j <= pigWeight; j ++){
    25                 dp[j] = min(dp[j],dp[j-w[i]]+p[i]);
    26             }
    27         }
    28         if(dp[pigWeight] == INF) cout<<"This is impossible."<<endl;
    29         else cout<<"The minimum amount of money in the piggy-bank is "<<dp[pigWeight]<<"."<<endl;
    30     }
    31 
    32     return 0;
    33 }
  • 相关阅读:
    如何勾选 servlet如何获取?
    过滤器 如何实现获取不到用户名跳转回登录界面
    验证码
    cookie保存用户名及密码
    游标
    存储过程和自定义函数的区别
    瞎搞
    sql 试图索引
    sql 常用函数
    sql 简单的定义变量 声明 输出
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3009124.html
Copyright © 2011-2022 走看看