[kuangbin带你飞]专题十二 基础DP1

A

别人家的博客
别人家的博客

题意: m个不重叠的区间的 最大值

dp[i][j]表示 在确保 第j 个数在的情况下分成 i 组的情况, 所以存在两种情况,第j个数与前
dp[i][j-1]一起 或者 dp[i-1][k] 一起单独成区间

dp[i][j]=max(dp[i][j-1]+max(dp[i-1][k]))+a[j]

k的取值为 (i-1)~j

而max(dp[i-1][k]) 表示上一次求得的值 ,而dp只与上一次 有关,并记录上一次的最大值即可

#include
using namespace std;
typedef long long ll;
#define maxn 1000003
ll dp[maxn][2];
ll sum[maxn];
int main()
{
    ll m,n;
    ll t;
    while(cin>>m>>n)
    {
        sum[0]=0;
        dp[0][0]=0;
        dp[0][1]=0;
        for(int i=1;i<=n;i++)
        {
            cin>>t;
            sum[i]=sum[i-1]+t;
            dp[i][0]=0;
            dp[i][1]=0;
        }
        ll ans=0;
        for(int i=1;i<=m;i++)
        {
             ans=-327670000005;
            for(int j=i;j<=n;j++)
            {
                   // cout<

B hdu 1029

题意:输出 超过 一半的数 是什么?

水题吧

#include
using namespace std;
typedef long long ll;
mapmapp;
int main()
{
    int n;
    ll t;
    while(scanf("%d",&n)!=EOF)
    {
        ll ui=0;
       mapp.clear();
      for(int i=0;i

C hdu 1069

#include
using namespace std;
typedef long long ll;
struct Node{
int x;
int y;
int z;
};
Node node[200];
int height[200];
bool cmp(Node a,Node b)
{
    if(a.x==b.x)
    {
        if(b.y==a.y)
        {
            return a.z>b.z;
        }
        return a.y>b.y;
    }
    return a.x>b.x;
}
int main()
{
    int n;
    int x,y,z;
    int t=1;
    while(scanf("%d",&n)!=EOF&&n)
    {
        memset(height,0,sizeof(height));
      for(int i=0;i>x>>y>>z;
          node[i*6].x=x;
          node[i*6].y=y;
          node[i*6].z=z;

          node[i*6+1].x=x;
          node[i*6+1].y=z;
          node[i*6+1].z=y;


          node[i*6+2].x=y;
          node[i*6+2].y=x;
          node[i*6+2].z=z;

          node[i*6+3].x=y;
          node[i*6+3].y=z;
          node[i*6+3].z=x;

          node[i*6+4].x=z;
          node[i*6+4].y=y;
          node[i*6+4].z=x;

          node[i*6+5].x=z;
          node[i*6+5].y=x;
          node[i*6+5].z=y;
      }
      sort(node,node+6*n,cmp);
      height[0]=node[0].z;
      int ans=height[0];
      for(int i=0;inode[j].x&&node[i].y>node[j].y)
              {
                  if(height[j]

G hdu1176

#include
using namespace std;
typedef long long ll;
#define maxn 5000003
int mapp[13][100002];
bool vis[13][100002];
int main()
{
 //freopen("input.txt","r",stdin);
 //freopen("output.txt","w",stdout);
    int t;
    int a,b;
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)
            break;
        memset(mapp,0,sizeof((mapp)));
        memset(vis,0,sizeof(vis));
        t=0;
        for(int i=0;i1&&vis[j-1][i-1])
                {
                 temp=max(temp,(mapp[j-1][i-1]+mapp[j][i]));
                 vis[j][i]=1;
                }
                if(j<11&&vis[j+1][i-1])
                {
                 temp=max((mapp[j+1][i-1]+mapp[j][i]),temp);
                 vis[j][i]=1;
                }
                if(vis[j][i])
                {
                 mapp[j][i]=temp;
                 ans=max(mapp[j][i],ans);
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

F hdu 1260

#include 
using namespace std;
#define maxn 101
int n1[2001];
int n2[2001];
int dp[2001][2];
int main()
{
   // freopen("input.txt","r",stdin);
    int n;
    int t;
    cin>>t;
    int a,b;
    while(t--)
    {
    cin>>n;
    for(int i=0;i>n1[i+1];
    }
    for(int i=0;i>n2[i+1];
    }
        for(int j=0;j<=2000;j++)
        {
            dp[j][0]=25000;
            dp[j][1]=25000;
        }
         dp[1][0]=n1[1];
         dp[0][0]=0;
         dp[0][1]=0;
    for(int i=2;i<=n;i++)
    {
        dp[i][0]=min(dp[i-1][0],dp[i-1][1])+n1[i];
        dp[i][1]=min(dp[i-2][0],dp[i-2][1])+n2[i-1];
    }
    int ans=min(dp[n][0],dp[n][1]);
    //cout<=12)
    {
        f=1;
    }
    if(f==0)
    {
        printf("%02d:%02d:%02d am\n",h,fen,seco);
    }
    else
    {
         printf("%02d:%02d:%02d pm\n",h,fen,seco);
    }
    }
    return 0;
}

I hdu1257

贪心?

#include 
using namespace std;
#define maxn 101
int n1[2001];
vectorv;
int main()
{
    //freopen("input.txt","r",stdin);
    int n;
    int t;
    int a,b;
    int ans=0;
    while(cin>>n)
    {
        v.clear();
        ans=0;
    for(int i=1;i<=n;i++)
    {
        cin>>n1[i];
    }
        for(int i=1;i<=n;i++)
        {
                int f=0;
                sort(v.begin(),v.end());
                for(int j=0;j=n1[i])
                    {
                        f=1;
                        v[j]=n1[i];
                        break;
                    }
                }
                if(f==0)
                {
                  //  cout<

J hdu1160

#include 
using namespace std;
#define maxn 101
int n1[2001];
vectorv;
struct Node{
int w;
int s;
int id;}node[1001];
int c[1001];
int dp[1001];
bool cmp(Node a,Node b)
{
    if(a.w==b.w)
    {
        return a.s>b.s;
    }
    return a.w>node[n].w>>node[n].s)
        {
            node[n++].id=n;
        }
    sort(node,node+n,cmp);
    int temp=1;
    int f=1;
    dp[0]=1;
    int mf=0;
    for(int i=1;inode[i].s)
            {
                  if(temp

L poj 1458
最长公共子序列

#include
#include
#include
using namespace std;
#define maxn 201
int ma[1000][1000];
int main()
{
    //freopen("input.txt","r",stdin);
    int cn=0;
    string s1,s2;
    while(cin>>s1>>s2)
    {
        memset(ma,0,sizeof(ma));
        for(int i=0;i

N poj 2533

最长公共子序列长度

#include
#include
#include
using namespace std;
#define maxn 201
int ma[1000];
int dp[1000];
int main()
{
    //freopen("input.txt","r",stdin);
    int n=0;
    string s1,s2;
    while(cin>>n)
    {
        int ans=1;
       for(int i=0;i>ma[i];
       }
       for(int i=0;ima[j])
                {
                    if(dp[i]

你可能感兴趣的:([kuangbin带你飞]专题十二 基础DP1)