codeforces 18D Seller Bob DP

Posted 13rj1115

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeforces 18D Seller Bob DP相关的知识,希望对你有一定的参考价值。

题意:按顺序你能够获得一些价值为2^x的硬盘,你可以保留一个并且在之后卖掉,但是你在卖之前不可以保留其他硬盘,求最大收益

思路:dp[i]=min(dp[i-1],dp[j]+2^x[j])

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static BigInteger MAX(BigInteger a,BigInteger b){
        if (a.compareTo(b)==1) return a;
        return b;
    }
    public static void main(String[] args) {
        BigInteger dp[]=new BigInteger[5005];
        BigInteger d[]=new BigInteger[2005];
        for(int i=0;i<=2000;i++){
            if(i==0) d[i]=BigInteger.ONE;
            else d[i]=d[i-1].multiply(BigInteger.valueOf(2));
        }
        int f[]=new int[5005];
        int p[]=new int[5005];
        Scanner cin=new Scanner(System.in);
        while(cin.hasNext()){
            int n=cin.nextInt();
            for(int i=0;i<n;i++){
                String s=cin.next();
                int x=cin.nextInt();
                if(s.charAt(0)==‘w‘) f[i]=0;
                else f[i]=1;
                p[i]=x;
            }
            for(int i=0;i<n;i++)
                dp[i]=BigInteger.ZERO;
            for(int i=1;i<n;i++){
                if(f[i]==1){
                    for(int j=i-1;j>=0;j--){
                        if(f[j]==0&&p[i]==p[j]) {
                            dp[i]=MAX(dp[i-1], dp[j].add(d[p[i]]));
                            break;
                        }
                        dp[i]=MAX(dp[i], dp[i-1]);
                    }
                }
                else dp[i]=dp[i-1];
            }
            System.out.println(dp[n-1]);
        }
    }
}

 

以上是关于codeforces 18D Seller Bob DP的主要内容,如果未能解决你的问题,请参考以下文章

CodeForces - 346A Alice and Bob博弈

Codeforces Round #201 (Div. 1) / 346A Alice and Bob

Codeforces 346A Alice and Bob 博弈

codeforces_346A Alice and Bob(数学)

Codeforces - 346A - Alice and Bob - 简单数论

Codeforce 346A. Alice and Bob