码迷,mamicode.com
首页 > 其他好文 > 详细

两道dp——ucf 2017

时间:2020-04-06 21:00:13      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:bit   bsp   break   main   lis   sizeof   ace   线性dp   else   

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\n",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]<<\n; else cout<<dp[n]<<" "; } } }

 

两道dp——ucf 2017

标签:bit   bsp   break   main   lis   sizeof   ace   线性dp   else   

原文地址:https://www.cnblogs.com/zsben991126/p/12643874.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!