zoukankan      html  css  js  c++  java
  • 两道dp——ucf 2017

    G——直接把每种物品拆成一个个的,就可以用线性dp扫一次做完

    /*
    直接拆成一个一个的
    dp[i][j]表示用j次机会把前i个拿下的概率
    初始状态:dp[i][i]=dp[i-1][i-1]*p[i]
    dp[i][j]=dp[i-1][j-1]*p[i]+dp[i][j-1]*(1-p[i]) 
    */
    #include<bits/stdc++.h>
    using namespace std;
    
    int n,tot;
    double p[3000],dp[2][20000];
    
    int main(){
        int t;cin>>t;
        while(t--){
            memset(dp,0,sizeof dp);
            tot=1;
            cin>>n;
            for(int i=1;i<=n;i++){
                int k;
                double x;
                cin>>k>>x;
                for(int j=tot;j<=tot+k-1;j++)
                    p[j]=x;
                tot+=k;
            }
            int a;cin>>a;
            tot--;
            for(int i=0;i<=a;i++)
                dp[0][i]=1; 
            int cur=1;
            for(int i=1;i<=tot;i++){
                for(int j=i;j<=a;j++){
                    dp[cur][j]=dp[cur^1][j-1]*p[i];
                    if(j!=i)dp[cur][j]+=dp[cur][j-1]*(1-p[i]);
                }
                cur^=1;
                //memset(dp[cur],0,sizeof dp[cur]);
            }
            if(tot>a)puts("0.000");
            else printf("%.3lf
    ",dp[cur^1][a]);
        }
    }

    H——暴力lis

    /*
    pre[i][j]表示以i为结尾长度为j的lis的最右端起点
    dp[i]=max(j+dp[pre[i][j]-1],dp[i-1]) 
    */ #include<bits/stdc++.h> using namespace std; #define N 205 int n,a[N],dp[N],pre[N][N]; int main(){ int t;cin>>t; while(t--){ cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) pre[i][j]=0; for(int i=1;i<=n;i++) pre[i][1]=i; for(int i=1;i<=n;i++) for(int j=i-1;j>=1;j--) if(a[i]>a[j]){ pre[i][2]=j;break; } for(int k=3;k<=n;k++){//长为k的lis for(int i=1;i<=n;i++) for(int j=i-1;j>=1;j--) if(a[i]>a[j]){ pre[i][k]=max(pre[i][k],pre[j][k-1]); } } /* for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) cout<<pre[i][j]<<" "; puts(""); } puts("");*/ for(int k=1;k<=n;k++){ memset(dp,0,sizeof dp); for(int i=1;i<=n;i++){ dp[i]=dp[i-1]; for(int j=k;j<=n;j++) if(pre[i][j]!=0) dp[i]=max(dp[i],dp[pre[i][j]-1]+j); } if(k==n)cout<<dp[n]<<' '; else cout<<dp[n]<<" "; } } }
  • 相关阅读:
    编写你的应用程序(二)、原生客户端模块
    编写你的应用程序(一)、应用结构
    checkpoint机制,show engine innodb status
    InnoDB关键特性,innodb_old_blocks_time,锁,内存管理,latch争用
    Innodb引擎,MySQL修改参数
    MySQL数据库体系结构
    IT行业数据库分析
    生成一个千万行的表
    范式小知识
    MySQL触发器
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12643874.html
Copyright © 2011-2022 走看看