We need know.

整数类型最大值:

  short : 32766;

  int : 2147483646;

 

lower_bound: 找出指向满足ai >= k 的 ai 的最小的指针;求最长单调递增序列;

upper_bound: 找出指向满足ai > k 的 ai 的最小的指针;求最长单调不递减序列;

  upper_bound(a, a+n, k) - lower_bound(a, a+n, k) , 有序数组a中的k的个数;

lower_bound用法: 

    int it1 = lower_bound(a, a+n, k) - ans;it1 表示 下标;

    int *it2 = lower_bound(a, a+n, k); *it2 表示 数组;

    it1 = it2 - ans;

 

01背包问题:

    memset(dp, 0, sizeof(dp));

    for(int i = 0; i < n; i++){
      for(int j = v; j >= a[i].v; j--){
        dp[j] = max(dp[j], dp[j-a[i].v] + a[i].w);
      }
    }

又见01背包问题(枚举价值求同等价值需要的最小体积):

    memset(dp, 0, sizeof(dp));

    dp[0] = 0;

    for(int i = 0; i < n; i++){

      for(int j = Sum_w; j >= a[i].w; j--){

        dp[j] = min(dp[j]. dp[j-a[i].w] + a[i].v);

      }

    }

    for(int i = 0; i <= Sum_w; i++){

      if(dp[i] <= v){

        ans = i;

      }

    }

完全背包问题:

    //memset(dp, -INF, sizeof(dp));dp[0] = 0;//完全装下不留空间;//if(dp[v]) < 0)puts("-1");

    //memset(dp, 0, sizeof(dp));只求可装最大价值;

    for(int i = 0; i < n; i++){

      for(int j = a[i].v; j <= v; j++){

        dp[j] = max(dp[j], dp[j-a[i].v] + a[i].w);

      }

    }

 

转载于:https://www.cnblogs.com/ACMessi/p/4905281.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值