首页 > 其他分享 >csp201612-4

csp201612-4

时间:2023-03-12 23:34:01浏览次数:39  
标签:频数 int csp201612 1005 霍夫曼 DP

题目:计算机软件能力认证考试系统

区间DP

为了使霍夫曼编码变成字典序,只需要将挑选顺序改为每次都选择相邻的即可 每次合并都是累加合并字母频数*1,等同于霍夫曼编码的一单位长度*频数,因此计算合并所有所花销的最小代价 由此转变为区间DP问题 代码直接套模板:
#include<bits/stdc++.h>
using namespace std;
int f[1005][2005];
int sum[1005];
int main(){
    int n,t;cin>>n;
    for(int i=1;i<=n;i++){
        scanf("%d",&t);
        sum[i]=sum[i-1]+t;
    }
    memset(f,63,sizeof f);
    for(int i=1;i<=n;i++)f[i][i]=0;
    for(int len=2;len<=n;len++){
        for(int i=1;i<=n-len+1;i++){
            int l=i,r=i+len-1;
            for(int k=l;k<r;k++){
                f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]+sum[r]-sum[l-1]);
            }
        }
    }
    cout<<f[1][n];
}

 

 

标签:频数,int,csp201612,1005,霍夫曼,DP
From: https://www.cnblogs.com/yds0823/p/17209757.html

相关文章

  • csp201612-2
    题目:计算机软件能力认证考试系统#include<bits/stdc++.h>usingnamespacestd;doubleT[10]={0,45,345,1245,7745,13745,22495};doubler[10]={3500,5000,8000,12500,......
  • CSP201612-3权限查询
            多年后再回头看这道题觉得很简单,写起来还是很复杂,我的书写习惯不好,找bug找了很久。特别注意在构建角色时,一个角色可能会有多个权限,取最大值,又......