BestCoder Round #91 1001 Lotus and Characters
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6011
题意:
Lotus有nn种字母,给出每种字母的价值以及每种字母的个数限制,她想构造一个任意长度的串。
定义串的价值为:第1位字母的价值*1+第2位字母的价值*2+第3位字母的价值*3……
求Lotus能构造出的串的最大价值。(可以构造空串,因此答案肯定\geq 0≥0)
分析:
做这个题目的时候,第一感觉回溯算了,不用想,肯定T了。
#include <bits/stdc++.h> using namespace std; int n;
int val[];
int cnt[];
int len; int dfs(int cur)
{
int ans = ;
if(cur>=len+) return ;
else
{
for(int i=; i<n; i++)
{
if(cnt[i]>)
{
cnt[i]--;
ans = max(ans,(cur+)*val[i]+dfs(cur+));
cnt[i]++;
}
}
}
return ans;
} int main()
{
int t;
scanf("%d",&t); while(t--)
{
scanf("%d",&n);
len = ;
for(int i=; i<n; i++)
{
scanf("%d%d",&val[i],&cnt[i]);
len+=cnt[i];
} printf("%d\n",dfs());
}
return ;
}
后来想DP,直觉告诉我,正权值的放后面。每次计算后面的数值,又不知道前面有多少位,怎么解决这个问题呢?
就类似于前缀和,写一个后缀和,之前的位数不确定,怎么解决呢?
Ans[i] = Ans[i+1] + sum[i+1] +v[i];
状态转移就是多加了一遍后缀和,和首位。最后找一下最好的切割点。
其实这个切割点也可以从后往前找。
#include <bits/stdc++.h> using namespace std; int main()
{
int t;
scanf("%d",&t);
while(t--) {
int n;
scanf("%d",&n); vector<int> v; for(int i=;i<n;i++) {
int val,cnt;
scanf("%d%d",&val,&cnt);
for(int i=;i<cnt;i++) {
v.push_back(val);
}
} sort(v.begin(),v.end()); int len = v.size(); int Ans[];
int sum[]; memset(Ans,,sizeof(Ans));
memset(sum,,sizeof(sum)); for(int i=len-;i>=;i--) {
sum[i] = sum[i+] + v[i];
} for(int i=len-;i>=;i--) {
Ans[i] = Ans[i+] + sum[i+] + v[i];
} int ans = ; //for(int i=0;i<len;i++) {
// ans = max(ans,Ans[i]);
//} for(int i=len-;i>=;i--) {
if(ans<Ans[i])
ans = Ans[i];
else break;
} printf("%d\n",ans);
} return ;
}
BestCoder Round #91 1001 Lotus and Characters的更多相关文章
- BestCoder Round #91 1002 Lotus and Horticulture
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6012 题意: 这几天Lotus对培养盆栽很感兴趣,于是她想搭建一个温室来满足她的研究欲望. Lotus ...
- 贪心 BestCoder Round #39 1001 Delete
题目传送门 /* 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 否则再在tot里减去多余的即为答案 用set容器也可以做,思路一样 */ # ...
- 暴力 BestCoder Round #41 1001 ZCC loves straight flush
题目传送门 /* m数组记录出现的花色和数值,按照数值每5个搜索,看看有几个已满足,剩下 5 - cnt需要替换 ╰· */ #include <cstdio> #include < ...
- 暴力 BestCoder Round #46 1001 YJC tricks time
题目传送门 /* 暴力:模拟枚举每一个时间的度数 详细解释:http://blog.csdn.net/enjoying_science/article/details/46759085 期末考结束第一 ...
- 字符串处理 BestCoder Round #43 1001 pog loves szh I
题目传送门 /* 字符串处理:是一道水题,但是WA了3次,要注意是没有加'\0'的字符串不要用%s输出,否则在多组测试时输出多余的字符 */ #include <cstdio> #incl ...
- BestCoder Round #75 1001 - King's Cake
Problem Description It is the king's birthday before the military parade . The ministers prepared a ...
- BestCoder Round #92 1001 Skip the Class —— 字典树 or map容器
题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=748&pid=1001 题解: 1.trie树 关 ...
- BestCoder Round #61 1001 Numbers
Problem Description There are n numbers A1,A2....An{A}_{1},{A}_{2}....{A}_{n}A1,A2....An,yo ...
- BestCoder Round #87 1001
GCD is Funny Accepts: 524 Submissions: 1147 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 655 ...
随机推荐
- HIVE 计算指定日期本周的第一天和最后一天
-- 计算指定日期本周的第一天和最后一天 select day ,dayofweek(day) as dw1 ,date_add( - dayofweek(day)) as Su_s -- 周日_st ...
- 基础 —— ip地址与子网掩码的认识
目录: 1.IP地址的作用 2.IP地址如何表示 3.IP地址的结构 4.子网掩码 5.IP地址的分类 6.私有IP地址 7.二进制与十进制的转换 8.练习题 IP地址的作用: 在一定范围内,唯一的标 ...
- call and apply
apply()把参数打包成Array再传入: call()把参数按顺序传入. Math.max.apply(null, [3, 5, 4]); // 5 Math.max.call(null, 3, ...
- 【密码学】CSP的概念
CSP加密服务提供者(Cryptographic Service Provider)具有一下几个特点: CSP是真正执行密码运算的独立模块 物理上一个CSP由两部分组成:一个动态连接库,一个签名文件 ...
- 为什么阿里云服务器的docker启动tomcat这么慢??
https://blog.csdn.net/tianyiii/article/details/79314597 最近在阿里云服务器使用Docker启动Tomcat,发现tomcat服务器启动过程很慢. ...
- DEDE会员注册邮件验证时,用户无法收到邮件的解决方法
本文以qq邮箱.163邮箱和易网库提供的企业邮箱为例,简要介绍在织梦(DEDECMS)中设置SMTP验证发送邮件的方法 一.在织梦中使用qq邮箱发送邮件 1.在织梦中使用qq邮箱发送邮件, 需要确保q ...
- ThinkPHP 统计数据(数字字段)更新 setInc 与 setDec 方法
ThinkPHP 统计数据更新 ThinkPHP 内置了对统计数据(数字字段)的更新方法: setInc():将数字字段值增加 setDec():将数字字段值减少 setInc() ThinkPHP ...
- NodeJS 开发应用
NodeJS 开发应用 使用的 Node 版本: V8.11.4 开发工具: VSCode 1.27.1 系统: Deepin 15.7 Desktop x64 项目结构 项目结构 Project i ...
- Asp.Net Mvc: 应用BindAttribute
环境: Windows 2008, VS 2008 SP1, Asp.Net Mvc RC1 ----------------------------------------------------- ...
- Sql 本周当天本期日期转换
--查询当天: --查询24小时内的: --info为表名,datetime为数据库中的字段值 --查询当天: --查询24小时内的: select * from table where DateDi ...