【CF global1 D / CF1110D】 Jongmah

題意

你有n個數字,范圍[1, m],你可以選擇其中的三個數字構成一個三元組,但是這三個數字必須是連續的或者相同的,每個數字只能用一次,問這n個數字最多構成多少個三元組?

分析

這里想談一下DP的一個套路,捆綁
有的DP題目,它可能會要求和一些東西捆綁,求方案數,這種時候如何單點設置狀態呢?
以這個題為例,只考慮前i種數字,對于數字i,它可能 (i,i,i) (i-2,i-1,i) (i-1,i) (i,) 如果是后兩種,它還未構成一個合法的序列,我們還不知道是否存在i+1來完善它
也就是考慮前i種數字的時候,后兩種不應該被計入方案數里,但轉移的時候我們要用到他們的數量,這里就可以再用兩維將他的數量捆綁起來一起轉移
狀態
dp[i][j][k] 表示只考慮前i種數字,捆綁了j個(i-1,i) k個(i)的最大方案數
初始條件
dp[0][0][0] = 0 ,others = -inf
因為假設只考慮前0種數字(實際不存在,假定數量為0),它無法構成任何三元組,但是轉移到前1種可以用前0種轉移過來
其余的都是未求解狀態 ,默認為負無窮
轉移方案
我們有a[i+1]個i+1
考慮如何從dp[i][j][k]轉移到前i+1個去
考慮第一個貪心策略:如果有未完成的三元組,優先補全它,因為如果不補全,它便會向后需求,這樣無論如何也不會讓答案更大
所以我們需要用j+k個i+1 去補全(i-1,i)和(i)這樣我們形成了j個(i-1,i,i+1)可以計入方案數里,以及k個(i,i+1)
還剩下a[i+1] - j - k個i+1
枚舉我們捆綁多少個(i+1),將剩下的全部變成(i+1,i+1,i+1)
這樣轉移的方程就確定了
dp[i+1][k][t] = max ( dp[i+1][k][t] , dp[i][j][k] + j + (a[i+1]-j-k-t)/3)
最終答案就是只考慮前m個數字,最大的答案
考慮第二個貪心策略,如果我們夠造了三個順子,他們其實可以重組成三個同花,也就是說,j,k一定小于3

代碼

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[1000005];
int dp[1000005][3][3];
int main() {ios::sync_with_stdio(false);cin.tie(0);int tmp;cin>>n>>m;for(int i=1;i<=n;i++) {cin>>tmp;a[tmp]++;}memset(dp,0x80,sizeof(dp));dp[0][0][0] = 0;for(int i=0;i<m;i++) {for(int j=0;j<3;j++) {for(int k=0;k<3;k++) {int res = a[i+1] -j - k;for(int t=0;t<3&&t<=res;t++) {dp[i+1][k][t] = max(dp[i+1][k][t],dp[i][j][k]+j+(res-t)/3);}}}}int ans =0 ;for(int i=0;i<3;i++) for(int j=0;j<3;j++) ans = max(ans,dp[m][i][j]);cout<<ans<<endl;}

轉載于:https://www.cnblogs.com/greenty1208/p/10357533.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248543.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248543.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248543.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue基礎(下篇)

介紹 對vue組件的介紹網上有很多大家可以自行查詢 組件 (Component) 是 Vue.js 最強大的功能之一 組件可以擴展 HTML 元素&#xff0c;封裝可重用的代 組件注冊 全局注冊 Vue.component(‘組件名稱’, { }) 第1個參數是標簽名稱&#xff0c;第2個參數是一個選項對象 全局組…

MS17-010漏洞復現

攻擊機&#xff1a;192.168.148.132 kali linux2018.2 x64 靶機&#xff1a;192.168.1.129 win7 x64 首先用msfconsole的smb模塊掃描&#xff0c;看看是否有漏洞 use auxiliary/scanner/smb/smb_ms17_010 set rhosts 192.168.1.129 &#xff08;目標主機&#xff09; Ho…

watch 和 computed

<template><div class"hello"><h1>{{ msg }}</h1><h2>Essential Links</h2><!-- watch/computed比較 --><div><input v-model"firstName" type"text"><input v-model"lastName&q…

[BZOJ]3173: [Tjoi2013]最長上升子序列

題解: 考慮按照元素升序加入 所以對位置在其后的元素LIS無影響 然后從前面位置的最大值轉移過來就行 ,,,,平衡樹無腦模擬 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <vector> #include <s…

轉:HTTP協議簡介與在python中的使用詳解

1. 使用谷歌/火狐瀏覽器分析 在Web應用中&#xff0c;服務器把網頁傳給瀏覽器&#xff0c;實際上就是把網頁的HTML代碼發送給瀏覽器&#xff0c;讓瀏覽器顯示出來。而瀏覽器和服務器之間的傳輸協議是HTTP&#xff0c;所以&#xff1a; HTML是一種用來定義網頁的文本&#xff0c…

深受企業青睞的華為云

作為中國經濟活力與韌性的重要保障&#xff0c;無數中小企業也在為奪得各自領域的冠軍你追我趕。而席卷全球的數字化轉型浪潮&#xff0c;則將這場冠軍爭奪賽推向了關鍵節點。企業數字化的第一步就是業務云端化&#xff0c;對企業來說云計算是不可或缺的數字底座。上云&#xf…

一個程序員的水平能差到什么程度?

老板覺得公司里都是男的&#xff0c;缺少一點陰柔之氣&#xff0c;想平衡一下&#xff0c;正巧當時互金公司倒了一大批&#xff0c;大批簡歷投到公司&#xff0c;老板以為自己也是技術出身&#xff0c;就招了一個三年工作經驗的女程序員&#xff0c;互金出來的&#xff0c;要價…

vue路由詳解版一目了然

概念 路由的本質就是一種對應關系&#xff0c;比如說我們在url地址中輸入我們要訪問的url地址之后&#xff0c;瀏覽器要去請求這個url地址對應的資源。 那么url地址和真實的資源之間就有一種對應的關系&#xff0c;就是路由。 路由分為前端路由和后端路由 1).后端路由是由服務…

go語言環境搭建

1、windows環境搭建   1、安裝go   2、安裝goland開發工具包 2、test.go /* 可執行文件&#xff0c;包名必須是main */ package main /* fmt 字符串格式化的包 */ import "fmt"/*main入口函數*/ func main() { fmt.Printf("Hello, world" )} View Code…

進階函數

一、函數對象 函數是第一類對象&#xff1a;函數名指向的值可以被當做參數傳遞 1.函數名可以被傳遞 def func():print(func)f func # 函數名可以當做變量名 print(f) # f指向的也是函數func指向函數體代碼的內存地址 2.函數名可以被當做參數傳遞給其他參數 def func():print…

vue腳手架基礎API全面講解【內附多個案例】

vscode-插件補充 vue文件代碼高亮插件-vscode中安裝 代碼提示插件-vscode中安裝 知識點自測 想學會今天的內容, 先測測這幾個會不會 表達式, 變量是什么 new的作用和含義 實例化對象 什么是對象上的, 屬性和方法 對象的賦值和取值 this的指向 npm/yarn是什么, package.json干…

mysql 和 sqlserver sql差異比較

mysql:select * from table_name limit 100,200;--取出從100到200的數據 獲取時間&#xff1a;mysql:now() mysql tinyint&#xff08;0,1&#xff09; → bit float &#xff08;decimal(19,4)&#xff09;→ moneytext → ntextvarchar →nvarchar 轉載于:https://www.cnblo…

Vue 過濾器、計算屬性、偵聽器 圖解版 一目了然

文章目錄本篇學習目標1. vue基礎1.0_vue基礎 v-for更新監測1.1_vue基礎_v-for就地更新1.2_vue基礎_虛擬dom1.3_vue基礎_diff算法情況1: 根元素變了, 刪除重建情況2: 根元素沒變, 屬性改變, 元素復用, 更新屬性1.4_vue基礎_diff算法-key情況3: 根元素沒變, 子元素沒變, 元素內容…

linux shell命令行選項與參數用法詳解

問題描述&#xff1a;在linux shell中如何處理tail -n 10 access.log這樣的命令行選項&#xff1f;在bash中&#xff0c;可以用以下三種方式來處理命令行參數&#xff0c;每種方式都有自己的應用場景。1&#xff0c;直接處理&#xff0c;依次對$1,$2,...,$n進行解析&#xff0c…

Vue自定義指令原來這么簡單

本篇學習目標 能夠了解組件進階知識能夠掌握自定義指令創建和使用能夠完成tabbar案例的開發 1. 組件進階 1.0 組件進階 - 動態組件 目標: 多個組件使用同一個掛載點&#xff0c;并動態切換&#xff0c;這就是動態組件 需求: 完成一個注冊功能頁面, 2個按鈕切換, 一個填寫注冊…

重載(overload)與重寫(override)的區別

overload&#xff08;重載&#xff09;:在同一個類中&#xff0c;方法名相同&#xff0c;參數列表不相同。與返回值類型無關。 override&#xff08;重寫&#xff09;:存在同一個類中&#xff0c;或者父子接口中&#xff0c;方法名相同個&#xff0c;參數列表相同。遵循“兩同兩…

python學習,day3:函數式編程,*arge,**kwargs

對于不固定長度的參數&#xff0c;需要使用*arge&#xff0c;**kwargs來調用&#xff0c;區別是*arge是轉換為元組&#xff0c;而kwargs轉化為字典 # codingutf-8 # Author: RyAn Bi def test(*args): #參數組print(args)test(1,2,4,6,7,8) #方式1 test(*[1,2,4,5,6]) #方式2 #…

那些被人忽略的Vue導航知識

本篇學習目標 能夠了解單頁面應用概念和優缺點能夠掌握vue-router路由系統使用能夠掌握鏈接導航和編程式導航用法能夠掌握路由嵌套和路由守衛能夠掌握vant組件庫基礎使用 1. vue路由簡介和基礎使用 1.0 什么是路由 目標: 設備和ip的映射關系 目標: 接口和服務的映射關系 目…

passwd命令

-n 在這幾天你不能更改密碼&#xff01; -x 在n<時間<x在這段時間內你必須修改密碼&#xff01; -w 當距離x日期還有w天的時候開始提醒你改密碼&#xff01; -i 密碼過期i天之后&#xff0c;此密碼停用&#xff0c;你也就無法用此密碼登陸這個用戶了。注意是密碼過期之后…

一文帶你吃透Vue生命周期(結合案例通俗易懂)

文章目錄本篇學習目標1. vue生命周期1.0_人的-生命周期1.1_鉤子函數1.2_初始化階段1.3_掛載階段1.4_更新階段1.5_銷毀階段2. axios2.0_axios基本使用2.1_axios基本使用-獲取數據2.2_axios基本使用-傳參2.3_axios基本使用-發布書籍2.4_axios基本使用-全局配置3. nextTick和nextT…