LIS路徑記錄(UVA481)

出自一次很失敗的開學測試

LIS自然會做

可以參見:https://blog.csdn.net/Radium_1209/article/details/79704234

由于對于LIS的nlogn算法不熟悉,導致錯誤理解,記錄的路徑出現了問題,其中還用了n^2的算法記錄路徑(好理解),但是不出所料T了。

正確的方法應該是:由于nlogn算法中,dp[i]存的是長度為i的最后一位數字,并不是路徑!!!我們可以用一個path數組來標記每一個數字位于的位置,然后通過dfs倒著來找最后結果長度的最后一個,或者不用dfs直接找也行。

?

例題:(UVA481)

Write a program that will select the longest?strictly?increasing subsequence from a sequence of integers.

Input

The input file will contain a sequence of integers (positive, negative, and/or zero). Each line of the input file will contain one integer.

Output

The output for this program will be a line indicating the length of the longest subsequence, a?newline, a dash character ('-'), a?newline, and then the subsequence itself printed with one integer per line. If the input contains more than one longest subsequence, the output file should print the one that occurs last in the input file.

Notice that the second 8 was not included -- the subsequence must be strictly increasing.

Sample Input

-7
10
9
2
3
8
8
1

Sample Output

4
-
-7
2
3
8

題意:求LIS并輸出路徑(最后一個)

dfs版:

#include <cstdio>
#include <iostream>
using namespace std;int n=1,a[1000005];
int dp[1000005];
int path[1000005];void dfs(int i,int x)
{if (i<1 || x<=0)return;while(path[i]!=x)i--;dfs(i,x-1);printf("%d\n",a[i]);
}int main()
{while(~scanf("%d",&a[n])){n++;}n--;int len=1;dp[1]=a[1]; path[1]=1;for (int i=2;i<=n;i++){if (a[i]>dp[len]){dp[++len]=a[i];path[i]=len;}else{int pos=lower_bound(dp+1,dp+len+1,a[i])-dp;dp[pos]=a[i];path[i]=pos;}}printf("%d\n-\n",len);dfs(n,len);return 0;
}

?

非dfs版:

#include <cstdio>
#include <iostream>
using namespace std;int n=1,a[1000005];
int dp[1000005];
int path[1000005];
int ans[1000005];int main()
{while(~scanf("%d",&a[n])){n++;}n--;int len=1;dp[1]=a[1]; path[1]=1;for (int i=2;i<=n;i++){if (a[i]>dp[len]){dp[++len]=a[i];path[i]=len;}else{int pos=lower_bound(dp+1,dp+len+1,a[i])-dp;dp[pos]=a[i];path[i]=pos;}}printf("%d\n-\n",len);int temp=n;int l=len;while(l>=1){int i;for(i=temp;i>=1;i--){if (path[i]==l){ans[l]=a[i];l--; temp=i;break;}}if (i==0)break;}for (int i=1;i<=len;i++)printf("%d\n",ans[i]);return 0;
}

?

n^2版本(T了,正確性未知)

#include <cstdio>
#include <iostream>
using namespace std;int n=1,a[1000005];
int dp[1000005];
int path[1000005];
int ans[1000005];int main()
{while(~scanf("%d",&a[n])){n++;}n--;int len=0;for (int i=1;i<=n;i++){dp[i]=1;for (int j=1;j<i;j++)if (a[j]<a[i]){if (dp[i]<dp[j]+1){dp[i]=dp[j]+1;path[dp[i]]=j;}}if (dp[i]>=len){len=dp[i];ans[len]=a[i];for (int i=len;i>=2;i--)ans[i-1]=a[path[i]];}}printf("%d\n-\n",len);for (int i=1;i<=len;i++)printf("%d\n",ans[i]);return 0;
}

?

轉載于:https://www.cnblogs.com/Radium1209/p/10415345.html

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

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

相關文章

Activemq源碼、編譯、導入idea、源碼調試總結

1、在本地下載源碼 在GitHub官網搜activemq&#xff0c;找到排名第一的&#xff0c;并打開&#xff0c;如圖所示&#xff0c;拷貝url地址。 activemq托管地址&#xff1a;https://github.com/apache/activemq.git 切換到git bash下&#xff0c;輸入命令&#xff1a; mkdir a…

activiti 視圖

1. application.properties增加如下配置 spring.activiti.database-schema-updatefalsespring.activiti.db-history-usedfalsespring.activiti.db-identity-usedfalse 2. 視圖sql -- 修改表名稱 ALTER TABLE act_id_user RENAME act_id_user_bak1; ALTER TABLE act_id_group RE…

ActiveMQ源碼解析 建立連接

作為一個消息中間件&#xff0c;有客戶端和服務端兩部分代碼&#xff0c;這次的源碼解析系列主要從客戶端的代碼入手&#xff0c;分成建立連接、消息發送、消息消費三個部分。趁著我昨天弄明白了源碼編譯的興奮勁頭還沒過去&#xff0c;今天研究一下建立連接的部分。 如果讀起…

原生Js_實現廣告彈窗

廣告樣式當頁面加載后5s刷新在右下角 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>Gary圖片輪播</title><style type"text/css">#ad{width:300px;height: 300px;background-color:antiquewhite…

springcloud注冊中心eureka

1、前提 springcloud的注冊中心是以springboot為基礎搭建起來的。 開發工具&#xff1a;IDEA 項目管理工具&#xff1a;maven 2、搭建步驟 創建一個web項目&#xff08;建議使用IDEA工具構建項目&#xff09;修改pom文件 <dependency><groupId>org.springframework…

Nancy in .Net Core學習筆記 - 視圖引擎

前文中我們介紹了Nancy中的路由&#xff0c;這一篇我們來介紹一下Nancy中的視圖引擎。 Nancy中如何返回一個視圖(View) 在ASP.NET Mvc中&#xff0c;我們使用ViewResult類來返回一個視圖。Nancy中也提供了類似的功能, 在NancyModule類中&#xff0c;Nancy提供了一個ViewRendere…

設計模式之組合模式(Composite 模式)

引入composite模式 在計算機文件系統中&#xff0c;有文件夾的概念&#xff0c;文件夾里面既可以放入文件也可以放入文件夾&#xff0c;但是文件中卻不能放入任何東西。文件夾和文件構成了一種遞歸結構和容器結構。 雖然文件夾和文件是不同的對象&#xff0c;但是他們都可以被放…

Ansible批量在遠程主機執行命令

Ansible直接執行遠程命令&#xff0c;不用ssh登陸交互執行。    如下&#xff1a;    ansible all -i 192.168.199.180, -m shell -a "ifconfig" -u supermap    參數解釋&#xff1a;    -i 連接到遠程主機“192.168.199.180&#xff0c;”&#xf…

HOJ 2651

一道二分的題目&#xff0c;但要注意不能用double&#xff0c; 并且要注意一下二分的步驟 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define pi 3.1415926535898 #define eps 0.0001 using namespace std; inl…

HierarchicalBeanFactory接口

HierarchicalBeanFactory 提供父容器的訪問功能.至于父容器的設置,需要找ConfigurableBeanFactory的setParentBeanFactory(接口把設置跟獲取給拆開了!). HierarchicalBeanFactory源碼具體&#xff1a; 1、第一個方法返回本Bean工廠的父工廠。這個方法實現了工廠的分層。 2、第…

C++: C++函數聲明的時候后面加const

C: C函數聲明的時候后面加const 轉自&#xff1a;http://blog.csdn.net/zhangss415/article/details/7998123 非靜態成員函數后面加const&#xff08;加到非成員函數或靜態成員后面會產生編譯錯誤&#xff09;&#xff0c;表示成員函數隱含傳入的this指針為const指針&#xff0…

【計蒜客習題】消除字符串

問題描述 蒜頭君喜歡中心對稱的字符串&#xff0c;即回文字符串。現在蒜頭君手里有一個字符串 SS&#xff0c;蒜頭君每次都會進行這樣的操作&#xff1a;從 SS 中挑選一個回文的子序列&#xff0c;將其從字符串 SS 中去除&#xff0c;剩下的字符重組成新的字符串 SS。 蒜頭君想…

HierarchicalBeanFactory

BeanFactory分層 package org.springframework.beans.factory;//分層工廠 public interface HierarchicalBeanFactory extends BeanFactory {//返回工廠的父工廠BeanFactory getParentBeanFactory();//這個工廠中是否包含這個Beanboolean containsLocalBean(String name); }測…

Training a classifier

你已經學習了如何定義神經網絡&#xff0c;計算損失和執行網絡權重的更新。 現在你或許在思考。 What about data? 通常當你需要處理圖像&#xff0c;文本&#xff0c;音頻&#xff0c;視頻數據&#xff0c;你能夠使用標準的python包將數據加載進numpy數組。之后你能夠轉換這些…

19歲白帽子通過bug懸賞賺到一百萬美元--轉

出處&#xff1a;https://news.cnblogs.com/n/620858/ 19 歲的 Santiago Lopez 通過 bug 懸賞平臺 HackerOne 報告漏洞&#xff0c;成為第一位通過 bug 懸賞賺到一百萬美元的白帽子黑客。他的白帽子生涯始于 2015 年&#xff0c;至今共報告了超過 1600 個安全漏洞。他在 16 歲時…

代碼分層的設計

分層思想&#xff0c;是應用系統最常見的一種架構模式&#xff0c;我們會將系統橫向切割&#xff0c;根據業務職責劃分。MVC 三層架構就是非常典型架構模式&#xff0c;劃分的目的是規劃軟件系統的邏輯結構便于開發維護。MVC&#xff1a;英文即 Model-View-Controller&#xff…

【24小時內第四更】為什么我們要堅持寫博客?

前言 從2018年7月份&#xff0c;我開始了寫作博客之路。開始之前&#xff0c;我打算分享下之前的經歷。去年初公司來了個架構師&#xff0c;內部分享過docker原理&#xff0c;TDD單元測試驅動&#xff0c;并發并行異步編程等內容&#xff0c;讓我著實驚呆了&#xff0c;因為確實…

sqoop快速入門

轉自http://www.aboutyun.com/thread-22549-1-1.html 轉載于:https://www.cnblogs.com/drjava/p/10473297.html

ListableBeanFactory接口

ListableBeanFactory獲取bean時,Spring 鼓勵使用這個接口定義的api. 還有個Beanfactory方便使用.其他的4個接口都是不鼓勵使用的. 提供容器中bean迭代的功能,不再需要一個個bean地查找.比如可以一次獲取全部的bean(太暴力了),根據類型獲取bean.在看SpringMVC時,掃描包路徑下的…

HDU 4035 Maze

Maze http://acm.hdu.edu.cn/showproblem.php?pid4035 分析&#xff1a; 在樹上走來走去&#xff0c;然后在一個點可以k的概率回到1&#xff0c;可以e的概率走出去&#xff0c;可以1-k-e的概率走到其他的位置&#xff08;分為父節點和子節點討論&#xff09;。 轉移方程就是&a…