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]<<" "; } } }
  • 相关阅读:
    图解SSH隧道功能
    su和sudo命令的用法
    Linux下下载百度网盘资料
    WPS Office 2019 for Linux来了
    Linux下的录屏软件Kazam
    用hdparm获取硬盘参数
    百度,你能不能有点节操?
    locate的基本用法
    Java class不分32位和64位
    Web站点抓取工具webhttrack
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12643874.html
Copyright © 2011-2022 走看看