1.DP43 最少的完全平方数
DP43 最少的完全平方数
完全背包
1.1 解析

1.2 代码
#include <iostream>
using namespace std;
#include <cmath>
#include <vector>
int main()
{
int sum;
cin>>sum;
int n=(int)sqrt(sum);
vector<vector<int>> dp(n+1,vector<int>(sum+1));//创建dp表
for(int j=1;j<=sum;j++)dp[0][j]=0x3f3f3f3f;//初始化
for(int i=1;i<=n;i++)
{
for(int j=0;j<=sum;j++)
{
dp[i][j]=dp[i-1][j];
if(j>=i*i) dp[i][j]=min(dp[i-1][j],dp[i][j-i*i]+1);
}
}
cout<<dp[n][sum];
return 0;
}
2.MT7 字符编码
2.1 解析

2.2 代码
#include <iostream>
using namespace std;
#include <string>
#include <queue>
int main()
{
string s;
while(cin>>s)
{
int hash[128]={0};
//统计每个字符出现的次数
for(auto& ch:s)
hash[ch]++;
//2.生成最小哈夫曼树
priority_queue<int,vector<int>,greater<int>> heap;//小根堆
for(int i=0;i<128;i++)
{
if(hash[i])
heap.push(hash[i]);
}
int sum=0;
while(heap.size()>1)
{
int a=heap.top();heap.pop();
int b=heap.top();heap.pop();
sum+=a+b;
heap.push(a+b);
}
cout<<sum<<endl;
}
return 0;
}
1025

被折叠的 条评论
为什么被折叠?



