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 ...
随机推荐
- layui的表单功能
作为一个phper还是非常喜欢这个插件的~虽然在vue的群里面说这个插件好被人怼过..废话不多说, 这次使用到的是layui的表单功能.上次的日历忘记做笔记了非常可惜,大部分其实跟着文档撸就可以,这次 ...
- 练习六十七:HTML练习
题目:一个html文件,找出里面的链接 代码: from html.parser import HTMLParser import urllib.request class myhtml(HTMLPa ...
- python中字典排序,列表中的字典排序
python中字典排序,列表中的字典排序 一.使用python模块:operator import operator #首先要导入模块operator x = {1:2, 3:4, 4:3, 2:1, ...
- ubuntu 常用安装软件
1. Ubuntu安装chrome. sudo apt-get install chromium-browser w
- shell中获取本机ip地址
shell中获取本机ip地址 方法一: /sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr ...
- (转)老男孩:Linux企业运维人员最常用150个命令汇总
近来老男孩发现新手学习Linux记不住命令,不会分类.不会筛选重点,胡子眉毛一把抓当然记不住了. 特别整理Linux运维最常用150个命令和大家分享,大家学习命令不用在盲目了,根据分类,然后逐步学习! ...
- windows下curl的安装和简单使用
curl是利用URL语法在命令行方式下工作的开源文件传输工具.它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP. 一 ...
- 打乱式排序的Java版实现
项目中涉及到对大批量的数据进行打乱式排序,大概原理如下: 输入源数据:1,1,2,3,3,3,4,4 输出结果: 1,2,3,4,1,3,4,3 实现代码如下,采用递归的思想: static &l ...
- vue中添加echarts
方法一:全局引入echarts 步骤: 1.全局安装 echarts依赖. cnpm install echarts -- save 2.引入echarts模块,在Vue项目的main. ...
- Razor,aspx的占位控件(母版页)
1.razor: 母版页中:@*类似master的占位控件*@ @RenderSection("scripts", required: false) 部分页中: @section ...