zoukankan      html  css  js  c++  java
  • SDUT2408 Pick apples(贪心+完全背包)

    题目链接

    分析:

    贪心不能解决背包问题在于,它无法保证能将背包装满,部分闲置的背包空间使每公斤背包空间的价值降低了。

    因此可以大范围用贪心,小范围用背包。

    注意:

    提交过程中WA了很多次,原因已查明, WA时用的int p, v;而AC用的是long long p, v; 题目中已明确给出数据范围,按理说int是可以的,不明白为什么会WA

    AC代码如下:

    #include <iostream>
    #include <vector>
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    #include <cmath>
    
    using namespace std;
    
    const int maxn = 10000;
    
    struct num{
        long long p, v;
        double val;
    }a[3];
    
    long long dp[maxn+1000];
    
    bool cmp(const num &a, const num &b){
        return a.val > b.val;
    }
    
    int main(){
        int T, n, m;
        long long s;
        scanf("%d", &T);
        for(int nCase=1; nCase<=T; nCase++){
            s = 0;
            for(int i=0; i<3; i++){
                scanf("%lld %lld", &a[i].v, &a[i].p);
                a[i].val = (double)a[i].p/a[i].v;
            }
            memset(dp, 0, sizeof(dp));
            scanf("%d", &m);
            if(m > maxn){
                sort(a, a+3, cmp);
                n = floor((double)(m-maxn+100)/a[0].v)+1;
                s = n*a[0].p;
                m -= n*a[0].v;
            }
            for(int i=0; i<3; i++){
                for(int j=a[i].v; j<=m; j++){
                    dp[j] = max(dp[j], dp[j-a[i].v]+a[i].p);
                }
            }
            printf("Case %d: %lld\n", nCase, s+dp[m]);
        }
    
        return 0;
    }
  • 相关阅读:
    用FileSystemWatcher监视文件系统
    生成随机汉字验证码
    MySQL学习笔记二
    python高级学习笔记
    boost bind 表达式中的是值语义还是指针语义?
    容器与适配器的个人总结
    subversion linux使用方法
    boost asio(初学示例)
    MySQL学习笔记一
    subversion 命令
  • 原文地址:https://www.cnblogs.com/tanhehe/p/3032752.html
Copyright © 2011-2022 走看看