题目链接: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的更多相关文章

  1. BestCoder Round #91 1002 Lotus and Horticulture

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6012 题意: 这几天Lotus对培养盆栽很感兴趣,于是她想搭建一个温室来满足她的研究欲望. Lotus ...

  2. 贪心 BestCoder Round #39 1001 Delete

    题目传送门 /* 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 否则再在tot里减去多余的即为答案 用set容器也可以做,思路一样 */ # ...

  3. 暴力 BestCoder Round #41 1001 ZCC loves straight flush

    题目传送门 /* m数组记录出现的花色和数值,按照数值每5个搜索,看看有几个已满足,剩下 5 - cnt需要替换 ╰· */ #include <cstdio> #include < ...

  4. 暴力 BestCoder Round #46 1001 YJC tricks time

    题目传送门 /* 暴力:模拟枚举每一个时间的度数 详细解释:http://blog.csdn.net/enjoying_science/article/details/46759085 期末考结束第一 ...

  5. 字符串处理 BestCoder Round #43 1001 pog loves szh I

    题目传送门 /* 字符串处理:是一道水题,但是WA了3次,要注意是没有加'\0'的字符串不要用%s输出,否则在多组测试时输出多余的字符 */ #include <cstdio> #incl ...

  6. BestCoder Round #75 1001 - King's Cake

    Problem Description It is the king's birthday before the military parade . The ministers prepared a ...

  7. BestCoder Round #92 1001 Skip the Class —— 字典树 or map容器

    题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=748&pid=1001 题解: 1.trie树 关 ...

  8. BestCoder Round #61 1001 Numbers

    Problem Description There are n numbers A1,A2....An{A}_{1},{A}_{2}....{A}_{n}A​1​​,A​2​​....A​n​​,yo ...

  9. BestCoder Round #87 1001

    GCD is Funny Accepts: 524 Submissions: 1147 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 655 ...

随机推荐

  1. 设置Linux shell超时自动退出

    Linux shell,一般默认情况下是不会超时退出的,但是有的时候我们想要让它在多少分钟后没有操作自动退出终端(听起来有点像windows多少分钟后自动锁屏一样).我们可以通过设置来实现这一功能. ...

  2. php数组·的方法-数组排序

    /* * * 数组排序函数*/ //asort() 数组元素值升序排序 //arsort() 降序 $arr7=array(1,23,65,34,3,2,3,34,453,54,456,65,5); ...

  3. python学习2(转载)

    一.流程控制之while循环 语法:while 条件: 循环体else: else语句(当条件不成立的时候执行这里 和break没关系) 判断条件是否成立. 如果成立执行循环体.然后再次判断条件,.. ...

  4. informix(南大通用)sql语法的差异

    1.create view  444(...)  as select ...from... 2.insert into select.......union  select     不支持 请分开写 ...

  5. 用Java 8 Lambda表达式实现设计模式:命令模式

    在这篇博客里,我将说明如何在使用 Java 8 Lambda表达式 的函数式编程方式 时实现 命令 设计模式 .命令模式的目标是将请求封装成一个对象,从对客户端的不同类型请求,例如队列或日志请求参数化 ...

  6. WebGL 踩坑系列-1

    WebGL 中的一些选项WebGL 中开启颜色混合(透明效果) gl.enable(gl.BLEND); gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALP ...

  7. Golang笔记(一)简洁的语言风格

    Golang笔记(一)简洁的语言风格 概述 Golang继承了很多C语言的风格,寡人使用了十几年C语言,切换到Golang时上手很快,并且随着深入的使用,越来越喜欢这门语言.Golang最直观的感受是 ...

  8. sqlserverToXML

    --raw模式 以属性的形式展示select * from goods for xml rawselect *from goods for xml raw('goods') --修改节点名称selec ...

  9. [JAVA][Liferay] Configure sharding in multiple sites

    create databases first portal-ext.properties配置 hibernate.dialect=org.hibernate.dialect.PostgreSQLDia ...

  10. Python并发编程之进程池与线程池

    一.进程池与线程池 python标准模块concurrent.futures(并发未来) 1.concurrent.futures模块是用来创建并行的任务,提供了更高级别的接口,为了异步执行调用 2. ...