題目大意:中文題。。。就不解釋了
題目思路:看了其他巨巨的blog寫的,dp思路
#include ///時間複雜度o(n) 空間複雜度o(5n)#include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
using
namespace
std;
#define gamma 0.5772156649015328606065120 //
尤拉常數
#define mod 100000007
#define inf 0x3f3f3f3f
#define n 200010
#define maxn 10001000typedef
long
long
ll;typedef pair
pii;
int f[n]; ///
儲存第從1~i-1個客棧消費小於p的最大的客棧編號
int color[n]; ///
儲存1~i-1個客棧和i個客棧顏色相同的客棧個數
int c2[n]; ///
c2[i]=1~i-1號客棧中與第i號客棧色調相同,且到第i號旅館路上存在最低消費不大於p的客棧的客棧數目
int r[n]; ///
第1~i-1的客棧中色調與i客棧相同的最大的編號
int _max[n]; ///
maxc[i]=之前所有客棧中,色調為i的最大編號
intmain()
int ans=0
;
for(i=1; i<=n; ++i) ans+=c2[i];
cout
return0;
}
今天又重做了一遍,有了自己的思路,而且感覺比較清晰
#include ///時間複雜度o(kn) 空間複雜度o(2n+2k)#include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
#define mcp(x,y) memcpy(x,y,sizeof(y))
#define min(x,y) (x#define max(x,y) (x>y?x:y)
using
namespace
std;
#define gamma 0.5772156649015328606065120
#define mod 100000007
#define inf 0x3f3f3f3f
#define n 200005
#define maxn 10001000typedef
long
long
ll;typedef pair
pii;
inta[n],b[n];
int color[100]; ///
當遍歷到當前第i個客棧時,保留離當前客棧最近的(不包括當前客棧)
///**低於p的客棧前面的不同色調客棧的分別的和
int hotel[100]; ///
當遍歷到第i個客棧時保留的是前面不同色調客棧的分別的和
intans;
intmain()
ans+=color[tc];
if(tp<=p)
++color[tc];
++hotel[tc];
}printf(
"%d\n
",ans);
return0;
}
第三次解題,這次有較大優化且更易理解
#include ///時間複雜度o(n) 空間複雜度o(3k)#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
#define mcp(x,y) memcpy(x,y,sizeof(y))
#define min(x,y) (xy?x:y)
using namespace std;
#define gamma 0.5772156649015328606065120
#define mod 100000007
#define inf 0x3f3f3f3f
#define n 200005
#define maxn 10001000
typedef long long ll;
typedef pairpii;
int f[51]; ///保留1~i-1色調與i相同且到i途中有合適咖啡館的旅店總數
int hotel[51]; ///保留1~i-1色調與i相同的旅店總數
int last[51]; ///保留1~i-1色調與i相同的旅店最後出現的位置
int temp; ///temp是整個演算法的精髓,temp保留的是符合條件的咖啡館最後出現的位置
int main()
printf("%d\n",ans);
return 0;
}
NOIP2011 提高組 選擇客棧
今天考了noip11年的一些題,這道題是day2 t1,考試的時候我只想出了o n 2 的演算法,拿了七十分,下午改了兩個多小時,但是還是只寫了乙個o nlogn k 的演算法,但是在機房的老爺機上已經可以過了 鏈結在這裡 我們可以把每一種主題相同的客棧先用二維陣列存下來,同時記錄滿足費用 p的客棧...
NOIP 2011 選擇客棧
奇奇怪怪的題目。奇奇怪怪的演算法。題目描述 description輸入描述 input description 共n 1 行。第一行三個整數 n,k,p,每兩個整數之間用乙個空格隔開,分別表示客棧的個數,色調的數目和能接受的最低消費的最高值 接下來的 n 行,第i 1 行兩個整數,之間用乙個空格隔開...
NOIP2011選擇客棧
題目分析 這是一道比較好玩的題目,情景感比較強。而問題的實質就是 1 將同種顏色的客棧進行處理。2 對於乙個客棧,它有兩種情況,費用超過p 費用不超過p。3 超過p的找之後相同顏色且費用不超過p的。4 不超過p的與之後相同顏色的隨意組合。既然是批量處理,自然想到了字首和。處理3的時候用到了字尾和 想...