日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

USCACO Buy Low, Buy Lower

發(fā)布時(shí)間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 USCACO Buy Low, Buy Lower 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

求最長(zhǎng)下降子序列簡(jiǎn)單,難點(diǎn)就是求序列的個(gè)數(shù)更難的就說處理重復(fù)序列。求個(gè)數(shù)代碼還好理解判斷重復(fù)就是從那個(gè)數(shù)字一直往前找如果找到一個(gè)和它相等的(假設(shè)這兩個(gè)數(shù)字為ab),看看這兩個(gè)數(shù)字之間有沒有可以和后面數(shù)字既b組成序列的如果沒有(dp[i]==1)這兩個(gè)就相當(dāng)于一個(gè)數(shù)字。那么就使這個(gè)數(shù)的cnt【i】=0用一會(huì)不用計(jì)算這個(gè)數(shù)字。

然后再用大數(shù)字處理兩個(gè)數(shù)之間的加就行了。

/*
ID:jinbo wu
TASK: buylow
LANG:C++
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[5500];
string cnt[5500];
int dp[5500];
string add(string str1,string str2)
{string str;int len1=str1.length();int len2=str2.length();if(len1>len2){for(int i=0;i<len1-len2;i++)str2="0"+str2;}else{for(int i=0;i<len2-len1;i++)str1="0"+str1;}int temp,cf=0;for(int i=str1.length()-1;i>=0;i--){temp=str1[i]-'0'+str2[i]-'0'+cf;cf=temp/10;temp=temp%10;str = char(temp+'0')+str;}if(cf)str = char(cf+'0')+str;return str;
}
int main()
{freopen("buylow.in","r",stdin);freopen("buylow.out","w",stdout);int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];dp[i]=1;cnt[i]="1";}for(int i=1;i<=n;i++){for(int j=i-1;j>=1;j--){if(a[i]<a[j]){if(dp[i]<dp[j]+1){dp[i]=dp[j]+1;cnt[i]=cnt[j];}else if(dp[i]==dp[j]+1)cnt[i]=add(cnt[i],cnt[j]);}else{if(a[i]==a[j]){if(dp[i]==1)cnt[i]="0";break;}}}}int maxlen=0;for(int i=1;i<=n;i++){maxlen=max(dp[i],maxlen);}string ans="0";for(int i=1;i<=n;i++){if(dp[i]==maxlen)ans=add(ans,cnt[i]);}cout<<maxlen<<" "<<ans<<endl;}



總結(jié)

以上是生活随笔為你收集整理的USCACO Buy Low, Buy Lower的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。