zoukankan      html  css  js  c++  java
  • codeforces 988F

    题解:

    显然我们发现带两把及以上的伞不优

    那么我们就带一把伞或不带

    然后就很简单了

    dp ( i , j ) 表示到 x = i 处,带了编号为 j 的伞( j = 0则为没带)

    然后讨论一下转移就行了

     1 #include<bits/stdc++.h>
     2 #define pii pair<int,int>
     3 #define mp(a,b) make_pair(a,b)
     4 #define maxn 2005
     5 using namespace std;
     6 int a,n,m;
     7 int c[maxn];
     8 int dp[maxn][maxn];
     9 vector<pii> has[maxn];
    10 int w[maxn];
    11 int main()
    12 {
    13     scanf("%d%d%d",&a,&n,&m);
    14     for(int i=1;i<=n;++i)
    15     {
    16         int l,r;
    17         scanf("%d%d",&l,&r);
    18         c[r]++;c[l]--;
    19     }
    20     for(int i=a;i>=0;--i)c[i]+=c[i+1];
    21     for(int i=1;i<=m;++i)
    22     {
    23         int x,y;
    24         scanf("%d%d",&x,&y);
    25         has[x].push_back(mp(i,y));
    26         w[i]=y;
    27     }
    28     w[0]=0;
    29     memset(dp,127/2,sizeof(dp));
    30     dp[0][0]=0;
    31     for(int i=0;i<a;++i)
    32     {
    33         for(int j=0;j<=m;++j)if(dp[i][j]<(int)1e9)
    34         {
    35             if(c[i+1])
    36             {
    37                 if(j)dp[i+1][j]=min(dp[i+1][j],dp[i][j]+w[j]);
    38             }
    39             else dp[i+1][j]=min(dp[i+1][j],dp[i][j]+w[j]);
    40             if(!c[i+1])dp[i+1][0]=min(dp[i+1][0],dp[i][j]+w[0]);
    41             for(int k=0;k<has[i].size();++k)
    42             {
    43                 int x=has[i][k].first;
    44                 dp[i+1][x]=min(dp[i+1][x],dp[i][j]+w[x]);
    45             }
    46         }
    47     }
    48     int ans=(int)1e9;
    49     for(int j=0;j<=m;++j)ans=min(ans,dp[a][j]);
    50     if(ans==(int)1e9)puts("-1");
    51     else printf("%d
    ",ans);
    52     return 0;
    53 }
    View Code
  • 相关阅读:
    小儿吃鸡蛋食积案
    女子经前胀痛脸上红斑案
    小儿外感咳嗽咽痛案
    顽固偏头痛案
    交通心肾治失眠
    小儿扁桃体高热兼咳嗽案
    过敏疾患与太少两感相合
    经前乳胀案
    女子黃带案
    小儿外感后频繁眨眼案
  • 原文地址:https://www.cnblogs.com/uuzlove/p/10553464.html
Copyright © 2011-2022 走看看