zoukankan      html  css  js  c++  java
  • 经典dp——UCF 2016 G

    /*
    dp[i][j][k]表示到了第i颗子弹,cd1=j,cd2=k 的最优解 
    */
    #include<bits/stdc++.h>
    using namespace std;
    #define N 1005
    int cd1,cd2,n,b[N],dp[5][105][105];
    
    int solve(){
        int t,cd=0,ans=0;
        cin>>t;
        for(int i=1;i<=n;i++){
            cd=max(0,cd-(b[i]-b[i-1]));
            if(cd==0)ans++,cd=t;
        }
        return ans;
    }
    
    int main(){
        int t;cin>>t;
        for(int tt=1;tt<=t;tt++){
            cin>>n;
            for(int i=1;i<=n;i++)cin>>b[i];
            sort(b+1,b+1+n);
            int J;cin>>J;
            if(J==1){
                printf("Mission #%d: %d
    
    ",tt,n-solve());
                continue;
            }
            cin>>cd1>>cd2;
            int cur=1;
            
            memset(dp,0,sizeof dp);
                    
            for(int i=0;i<n;i++){
                
                for(int j=0;j<=cd1;j++)
                    for(int k=0;k<=cd2;k++)
                        dp[cur][j][k]=0x3f3f3f3f;
                        
                cur^=1;
                for(int j=0;j<=cd1;j++)
                    for(int k=0;k<=cd2;k++){
                        int d=b[i+1]-b[i];//下一颗子弹到来时间
                        int x=j-d,y=k-d;//下一颗子弹对应的冷却时间
                        x=max(x,0);y=max(y,0);
                        dp[cur^1][x][y]=min(dp[cur^1][x][y],dp[cur][j][k]+1);//不作为 
                        if(x==0)dp[cur^1][cd1][y]=min(dp[cur^1][cd1][y],dp[cur][j][k]);
                        if(y==0)dp[cur^1][x][cd2]=min(dp[cur^1][x][cd2],dp[cur][j][k]); 
                    }
                    
            }
            
            int ans=0x3f3f3f3f;
            for(int j=0;j<=cd1;j++)
                for(int k=0;k<=cd2;k++)
                    ans=min(ans,dp[cur^1][j][k]);
            printf("Mission #%d: %d
    
    ",tt,ans);
        }
    } 
  • 相关阅读:
    一、Python概念知识点汇总
    在ubuntu永久添加alias
    字符串转化为数字 不用sscanf
    python class类
    《Effective C++》笔记
    问到面向对象该如何回答
    数字和字符串互相转换
    python input print 输入输出
    《c专家编程》笔记
    判断是否是回文数
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12588215.html
Copyright © 2011-2022 走看看