分享
  1. 首页
  2. 文章

选择客栈算法题20220805

hld789123 · · 1926 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

用来记录一下自己对这道题的理解,先用java编写,代码逻辑是互通的。

题目链接:https://www.luogu.com.cn/problem/P1311

题解链接:https://www.luogu.com.cn/problem/solution/P1311(题解码字有误,建议配合代码阅读)

public static void main(String[] args) {
 Scanner scanner = new Scanner(System.in);
 int n,k,p,t,ans,price;
 ans = 0;
 t = 0;
 // n个客栈 k个色调 有p块钱
 n = scanner.nextInt(); //客栈
 k = scanner.nextInt(); //色调
 p = scanner.nextInt(); //最低消费
 int[] num = new int[k+1]; //用来记录颜色对应客栈有多少个
 int[] color = new int[n+1]; //用来记录每个客栈的颜色属性
 System.out.println("------------------------------");
 for(int i=1;i<=n;i++)
 {
 color[i] = scanner.nextInt();
 price = scanner.nextInt();
 if(price <= p)
 {
 //当碰到符合最低消费时,开始记录前面的客栈数到num数组中
 for(int j = i; j > t; j--)
 num[color[j]]++; //开始记录前面的客栈数
 t = i; //更新最后一个符合最低消费的位置
 ans += num[color[i]]-1; //减去本身
 }
 else
 ans += num[color[i]];
 System.out.println(Arrays.toString(num) + " | " + Arrays.toString(color) + " | " + ans);
 }
 System.out.printf("%d",ans);
 }

ans就是总方案数结果,其实核心就是下面这两句来统计选择方案,按照第二个客栈来选择第一个客栈。

ans+=num[color[i]]-1;

ans+=num[color[i]];

===因为只需要两个客栈之间有最低消费就可以,所以每个第二个客栈可选择的客栈都是前面所有相同色调的客栈===

选择的前提

1有出现最低消费客栈,只有当出现了最低消费的客栈num数组才会开始记录各个色调的客栈数

2第二个客栈与第一个客栈色调相同

3如果第二个客栈是最低消费客栈,要减去本身


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1926 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏