首页 > 其他分享 >E - Alphabet Tiles

E - Alphabet Tiles

时间:2024-06-17 23:43:51浏览次数:24  
标签:Tiles combination int Alphabet ll length dp

E - Alphabet Tiles

https://atcoder.jp/contests/abc358/tasks/abc358_e

 

思路

dp[i][j] --- 前i项组成j长度字符串的 方案总数。

状态转移为:

dp[i-1][j] * combination[j+l][l]  ----> dp[i][j+l]

l == 0, 1, ..., ci

 

 

Code

https://atcoder.jp/contests/abc358/submissions/54674227

 

typedef long long ll;

ll k;
ll c[30];

const ll mode = 998244353;

ll combination[1005][1005];
ll dp[30][1005];


void calc_combination(){
    combination[0][0] = 1;

    for(int i=1; i<=1000; i++){
        /*
        if none of i items is chosen,
        only one case exists
        */
        combination[i][0] = 1;
        combination[i][i] = 1;

        for(int j=1; j<=i; j++){
            /*
            if j item is chosen, the combination is from preceding i-1 items to chose j-1 items
            if j item is not chosen, all j items are from preceding i-i items.
            */
            combination[i][j] = combination[i-1][j-1] % mode + combination[i-1][j] % mode;
            combination[i][j] %= mode;
        }
    }
}

int main()
{
    calc_combination();
    
//    cout << "----- after calc combination -------"<< endl;

    cin >> k;
    
    for(int i=1; i<=26; i++){
        cin >> c[i];
    }

    /*
    if target string length is zero,
    then the valid case number is one.
    */
    dp[0][0] = 1;

//    cout << "----- dp init -------"<< endl;

    /*
    caculating dp
    */
    for(int i=1; i<=26; i++){
        for(int j=0; j<=k; j++){
            for(int l=0; l<=c[i]; l++){
                /*
                after adding i-th options, total length overflow k
                so to break
                */
                if (j+l>k){
                    break;
                }
                
                /*
                otherwise,
                adding i-th item,
                the total case number can be calcuted based on the dp of the previous i-1 items.
                i.e. the previous i-1 items compromise j-l string length, l is the possible length to make string length less than k
                so for the left l chars,
                they can be filled by i-th item with the combination l of j.
                */
                dp[i][j+l] += (dp[i-1][j] * combination[j+l][l]) % mode;
                dp[i][j+l] %= mode;
            }
        }
    }

    ll ans = 0;

    for(int i=1; i<=k; i++){
        ans += dp[26][i];
        ans %= mode;
    }

    cout << ans << endl;

    return 0;
}

 

标签:Tiles,combination,int,Alphabet,ll,length,dp
From: https://www.cnblogs.com/lightsong/p/18253455

相关文章

  • [题解]ABC358E Alphabet Tiles
    AtCoder~E-AlphabetTilesLuogu~ABC358EAlphabetTiles题意简述给定正整数\(K\)和\(C_1,C_2,\dots,C_{26}\)。请求出长度在\(1\)到\(K\)之间,满足下列条件的字符串个数(取模\(998244353\)):该字符串全由大写字母组成。对于\(1\lei\le26\),下面条件成立:设\(a......
  • 独立站点发布VectorTileServer的方法
    独立站点部署模式下,发布矢量切片服务的方式说明二维切片类型栅格地图瓦片(MapServer|WMTS)切片图层可绘制服务器上一组可通过Web访问的切片。在绘制栅格地图瓦片图层时,对在当前地图范围和地图比例中绘制图层时所需的切片执行请求。切片图层可用于绘制一组托管在已知U......
  • Three.js中加载和渲染3D Tiles
    1.引言3DTiles是3DGIS中常见的三维数据格式,能否用Three.js来加载渲染呢?肯定是可以,Three.js只是一个WebGL框架,渲染数据肯定可以,但是加载、解析数据得手动解决有没有一个第三方库解决这个问题呢?有,比如这个:NASA-AMMOS/3DTilesRendererJS:Rendererfor3DTilesinJavascrip......
  • CF935D Fafa and Ancient Alphabet 题解
    讲一个很暴力的方法(为描述方便,下文\(a\)数组代表\(s1\),\(b\)数组代表\(s2\))。发现假如当前\(a_i\neb_i\),就不需要再向下枚举了,于是拥有了分类讨论的雏形。我们设\(inv\)代表进行到这一步的概率,可分为以下四种情况:\(a_i>0,b_i>0\)。此时假如\(a_i=b_i\),略过;若\(a_i>......
  • 如何将OSGB格式的倾斜模型转换成3DTiles?
       通过以下方法可以将OSGB转换成3DTiles。 方法/步骤1、下载三维地图浏览器http://www.geosaas.com/download/map3dbrowser.exe,安装完成后桌面上出现”三维地图浏览器“图标。 2、双击桌面图标打开”三维地图浏览器“ 3、点击“倾斜模型”下拉菜单,然后点击“OSG......
  • INFINI Labs 产品更新 | Console 数据迁移支持 Percentiles 均匀分区
    INFINILabs产品又更新啦~,包括Consolev1.14.0,Gateway1.21.0。其中Console数据迁移支持Percentiles均匀分区,修复已知Bug等。以下是本次更新的详细说明。##INFINIConsolev1.14.0INFINIConsole是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行......
  • INFINI Labs 产品更新 | Console 数据迁移支持 Percentiles 均匀分区
    INFINILabs产品又更新啦~,包括Consolev1.14.0,Gateway1.21.0。其中Console数据迁移支持Percentiles均匀分区,修复已知Bug等。以下是本次更新的详细说明。INFINIConsolev1.14.0INFINIConsole是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行......
  • SuperMap-WebGL-S3MTilesLayer(图元操作)
    S3MTilesLayer,S3M(Spatial3DModel)图层类,通过该图层实现加载三维切片缓存,包括倾斜摄影模型、BIM模型、点云数据、精细模型、矢量数据、符号等。那S3MTilesLayer中针对图元的操作主要有'颜色','偏移','可见性'等,可通过下面这张表格,查看对应的方法,文章接下来就从这3个操作来进行说......
  • cesium 加载3dtiles
    注意cesium版本问题,还有这个是异步加载,定位到该模型时要加个延时settimeout效果 代码如下//3dtiles  functionaddThreeDTiles(url,option){    //开启地形深度检测:    //控制在渲染场景时,相机是否进行深度测试以避免将被遮挡的物体绘制在前......
  • Codeforces Round 888 (Div. 3) C. Tiles Comeback
    有\(n\)块瓷砖和一个正整数\(k\),第\(i\)块瓷砖染色为\(c_i\)。一开始站在第\(1\)块瓷砖往,然后可以开始往右跳吗,到第\(n\)块瓷砖停止。你可以得到的路径长度\(p\)为你从\(1\)到\(n\)踩过瓷砖的数量。你需要确定是否存在一条长度为\(p\)的路径满足。\(k\mid......