$CH$ $0x50$ & $0x51$ 做题记录

Mr Young's Picture Permutations

前面这儿写了挺多道辣,,,懒得写辣$QAQ$

LCIS

同上$QwQ$

Mobile Service

无脑$dp$入门题,,,?

设$f_{i,j,k}$表示时间$i$没站在$d_{i}$的两个人的坐标,然后只要记得判下说任意俩人不能站在同一个位置就欧克,,,$QwQ$

然后$i$显然是不需要的只是为了方便表述设的这一维,,,实际$code$中是不会有这一维的昂$QwQ$

哦话说,这样儿说着很简单,其实好像是要证个东西,,,就三个人的坐标一定都是移动到$d_{i}$,不可能移动到别的位置,,,$umm$过于显然不证了,,,只是$cue$下其实是要证这个东西的来着$QAQ$

$over$,代码咕了,可能10点多再放$QAQ$?

Making the Grade

同上$QwQ$

传纸条

又双叒是个$dp$无脑入门题,,,?

首先四维$dp$过于显然不想写了,,,

然后考虑四位压成三维,依然太显然了,,,不写辣/$kel\ kel\ kel$

反正大致思路就上面这样儿的,懒得写了$over$

对了,这个$code$是我去年9月份写的了(,,,我那个时候做的题居然这么水,,,?太菜了嘤嘤嘤),,,所以贼丑但我也懒得改了$QAQ$

#include<bits/stdc++.h>
using namespace std;
int a[55][55];
int f[110][55][55];
int read()
{
    char ch;
    int x=0;
    bool o=0;
    ch=getchar();
    while(ch!='-' && (ch<'0' || ch>'9'))ch=getchar();
    if(ch=='-')o=1;
    while(ch>='0' && ch<='9')
    {
        x=(x<<3)+(x<<1)+(ch^'0');
        ch=getchar();
    }
    if(o==1)return -x;
    return x;
}
int main()
{
    int m,n;
    m=read();
    n=read();
    for(int i=1;i<=m;i++)
        for(int j=1;j<=n;j++)a[i][j]=read();
    memset(f,-1,sizeof(f));
    f[2][1][1]=0;
    for(int k=3;k<m+n;k++)
        for(int i=1;i<n;i++)
            for(int j=i+1;j<=n;j++)
            {
                f[k][i][j]=max(f[k][i][j],max(f[k-1][i][j],max(f[k-1][i-1][j],max(f[k-1][i][j-1],f[k-1][i-1][j-1]))))+a[k-i][i]+a[k-j][j];
                if(f[k][i][j]==a[k-i][i]+a[k-j][j]-1)f[k][i][j]=-1;
            }
    printf("%d",f[m+n-1][n-1][n]);
    return 0;
}
View Code

I-country

相对而言还是比较有趣的辣,,,?

$so$大概港下$QwQ$

首先考虑怎么设状态?

首先理解下题意昂,这个所谓凸壳,其实就说要求左端点先递减后递增,右端点先递增后递减

于是显然就考虑状态为$f_{i,j,l,r,gd,gs}$,表示选到第$i$行,选了$j$个,左端点到$l$,右端点到$r$,左端点递增递减状态为$gd$,右端点递增递减状态为$gs$

转移,表述比较麻烦但并不难想,,,?就先不写辣$QwQ$

以上是口胡,如果有锅打完代码来$upd$,如果有难点我没发现打完代码来$upd$,$over$

Cookies

这题挺有趣的,,,就这题和之前做过的一道题有点儿像,,,这个,虽然是道绿但我印象还挺深的,,,因为它是这样儿的,就,有一部分之间是无后效性的,但有一部分是有后效性的,,,

这题也是,首先要想到,显然从多往少安排,所以这时候显然有个小小的贪心,就说$g_{i}$越大的拿到的饼干数越多,于是就先按$g_{i}$排个序,然后考虑设$f_{i,j,k}$表示分到第$i$个孩子了,然后分了$j$个饼干,这一个孩子拿了$k$个饼干,看数据范围,发现$O(NM^{2})$,就不太星$QAQ$

好然后再仔细思考下,假如现在有$m$块,显然先平均分,每人拿到$\left \lfloor \frac{m}{n} \right \rfloor$块,这样儿就能把$m$控制在$n$范围以内,就过辣!

然后就被$hack$辣嘤嘤嘤

来我先$hack$下我的无脑优化想法$QAQ$

比如有5个,分别是$inf,inf,inf,inf,0$,然后有13块饼干

如果先贪心,就先均分,每人2个,剩3个,然后这时候$dp$下,显然是前三个每人拿一个,然后代价就是$3\cdot inf$

但是正解应该是,前四个人每人拿3个,然后最后一个人拿1个,这样儿代价就是0,,,

所以就被$hack$了\$kel\ kel\ kel$

而且上面这个还有个问题在于,可以有相等的,就会导致并不知道到底有多少个比它大的$qwq$

好然后现在整个儿都被$hack$了嘤嘤嘤,,,

重写下解法嘤嘤嘤

这里要考虑,状态缩放,也就是通过等价交换使得时间复杂度变好看

先用下万能的分类讨论法$QwQ$

对了先说下,$i$表示的是第$i$个人,$j$表示的是分了$j$块饼干,$k$表示的是从第$k$个人开始所有人都只有1块

1)第$i$个人获得的饼干数>1

这个可以等价与分配$j-i$个饼干给前$i$个人,没人少拿一块,这个显然是等价的$QwQ$,因为相对大小是不变的(这个就和前面那个均分有点儿像,,,是不是$QwQ$

这样儿转移就可以变成,$f_{i,j}=f_{i-1,j-i}$

2)第$i$个人获得的饼干数=1

直接考虑在它及之前有多少个人只有1块?

这样儿转移就可以变成$f_{i,j}=(f_{k,j-(i-k)}+k\cdot \sum_{p=k+1}^{i}g_{p})_{min}$

综上,转移就是$f_{i,j}=(f_{i-1,j-i},(f_{k,j-(i-k)}+k\cdot \sum_{p=k+1}^{i}g_{p})_{min})_{min}$

就做完啦啦啦啦

数字组合

无脑$dp$,,,?

考虑设$f_{i,j}$表示前$i$个数拼出$j$的方案数,无脑背包下就好,,,?

$over$

自然数拆分

又是个无脑$dp$,,,

考虑设$f_{i}$表示拼出$i$的方案数,于是有$f_{i}=\sum f_{j}+f_{i-j}$

$over$

Jury Compromise

同上

Coins

同上

石子合并

无脑区间$dp$

设$f_{l,r}$,表示$[l,r]$的最小代价,做完了

几百年前的代码,贼丑,$QAQ$

#include<bits/stdc++.h>
using namespace std;
int n,m,a[210],f[222][222],f1[222][222],sum[404],q=0,ww,e,maxl=0,minl=999999999,i,j,l;
int main()
{
    cin>>n;
    for(i=1;i<=n;i++)
    {
        cin>>a[i];
        a[i+n]=a[i];
    }
    for(i=1;i<=2*n;i++)sum[i]=sum[i-1]+a[i];
    for(l=2;l<=n;l++)
    {
        for(i=1;i<=2*n-l+1;i++)
        {
            j=i+l-1;
            f[i][j]=999999;
            f1[i][j]=0;
            for(int k=i;k<=j-1;k++)
            {
                f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+sum[j]-sum[i-1]);
                f1[i][j]=max(f1[i][j],f1[i][k]+f1[k+1][j]+sum[j]-sum[i-1]);
            }
        }
    }
    for(i=1;i<=n;i++)  
    {  
        maxl=max(maxl,f1[i][i+n-1]);  
        minl=min(minl,f[i][i+n-1]);  
    }  
    cout<<minl<<endl<<maxl;
    return 0;
}
View Code

Polygon

金字塔

没有上司的舞会

选课

Naptime

环路运输

Mondriaan's Dream

炮兵阵地

开车旅行

Count The Repetitions

Cleaning Shifts

Fence

任务安排

任务安排2

Connected Graph

A Decorative Fence

乌龟棋

花店橱窗

Buy Low Buy Lower

Trip

Substract

陨石的秘密

划分大理石

Folding

能量项链

棋盘分割

Blocks

Strategic game

Bugs Integrated Inc

Fence Obstacle Course

K-Anonymous Sequence

Post Office

扑克牌

The Counting Problem

猜你喜欢

转载自www.cnblogs.com/lqsukida/p/10989979.html