zoukankan      html  css  js  c++  java
  • 动态规划练习1--腾讯暑期实习正式批

    小Q打算穿越怪兽谷,他不会打怪,但是他有钱。
    他知道,只要给怪兽一定的金币,怪兽就会一直护送着他出谷。
    在谷中,他会依次遇见N只怪兽,每只怪兽都有自己的武力值和要“贿赂”它所需的金币数。
    如果小Q没有“贿赂”某只怪兽,而这只怪兽“武力值”又大于护送他的怪兽武力之和,这只怪兽就会攻击他。
    小Q想知道,要想成功穿越怪兽谷而不被攻击,他最少要准备多少金币。
    输入格式
    第一行包含整数N,表示怪兽的数量。
    第二行包含N个整数d1,d2,…,dn
    ,表示每只怪兽的武力值。
    第三行包含N个整数p1,p2,…,pn
    ,表示收买N只怪兽所需的金币数。
    输出格式
    输出一个整数,表示所需最小金币数。
    数据范围
    1≤N≤50
    ,
    1≤di≤1012,
    1≤pi≤2
    输入样例1:
    3
    8 5 10
    1 1 2
    输出样例1:
    2
    输入样例2:
    4
    1 2 4 8
    1 2 1 2
    输出样例2:
    6

    dp思考两个问题
    1.状态表示
    F(i,j)表示一堆方案中的最优值  
    顺利走完前i个怪兽 花了j个金币 战斗力之和的最大值
    2状态计算
    热狗法
    子问题划分 要求不重复 不遗漏
     买通第i个怪兽 不买通第i个怪兽
    f(i-1,j-pi)+di    f(i-1,j)  第二种情况需要判断 f(i-1,j)>=di

    #include <iostream>
    #include <cstring>
    #include <vector>
    #include <queue>
    #include <cmath>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    
    typedef long long LL;
    const int N=55,M=N*2;
    LL d[N],dp[N][M];
    int p[N];
    int n;
    
    int main()
    {
    
        while(scanf("%d",&n)!=EOF)
        {
        for(int i=1;i<=n;i++)
            cin>>d[i];
        for(int i=1;i<=n;i++)
            cin>>p[i];
    //    for(int i=0;i<=n;i++)
    //    {
    //        fill(dp[i],dp[i]+(n+1)*2,-1);
    //    }
        memset(dp,-1,sizeof dp);
    
        dp[0][0]=0;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=i*2;j++){
                if(j>=p[i] && dp[i-1][j-p[i]]!=-1) dp[i][j]=dp[i-1][j-p[i]]+d[i];
                if(dp[i-1][j]>=d[i]) dp[i][j]=max(dp[i][j],dp[i-1][j]);
            }
        int res=0;
        for(int i=1;i<=n*2;i++)
        {
            if(dp[n][i]!=-1)
            {
                res=i;
                break;
            }
        }
    
        cout<<res<<endl;
    
        }
        return 0;
    
    }
  • 相关阅读:
    红黑树深入剖析及Java实现
    Innodb中的事务隔离级别和锁的关系
    从实际案例聊聊Java应用的GC优化
    Java HotSpot VM Options 参数设置
    jvm 字节码查看
    JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)
    jsp 预编译
    MySQL中有关TIMESTAMP和DATETIME的总结
    MySQL 索引及优化实战
    spring boot 配置https 报这个错误:java.lang.IllegalArgumentException: Private key must be accompanied by certificate chain
  • 原文地址:https://www.cnblogs.com/kelly1895/p/10727735.html
Copyright © 2011-2022 走看看