第一題:合理種植
大cos在氯銫石料場幹了半年,受盡了勞苦,終於決定辭職。他來到表弟小cos的寒樹中學,找到方克順校長,希望尋個活幹。
於是他如願以償接到了乙個任務……
美麗寒樹中學種有許多寒樹。方克順希望校園無論從什麼角度看都是滿眼寒樹,因此他不希望有三棵甚至更多寒樹種在一條直線上。現在他把校園裡n棵寒樹的座標都給了大cos,讓他數出存在多少多樹共線情況。(若一條直線上有三棵或以上的樹,則算出現乙個多樹共線情況。)
這道題判重比較麻煩。列舉前兩個點,算出斜率,第三個點和第二個點所在直線的斜率如果等於之前算出來的
一、二兩點的斜率,並且
一、二、三三點都未用過,ans++,一、二、三三點標記未使用過。
**:#include
#include
using namespace std;
int x[1005],y[1003];
bool b[1005][1005];
long long dis[1005][1005];
main()
for(i=1;i<=n-2;i++)
else }}
printf("%d",ans);
}第二題:排隊
小sin所在的班有n名同學,正準備排成一列縱隊,但他們不想按身高從矮到高排,那樣太單調,太沒個性。他們希望恰好有k對同學是高的在前,矮的在後,其餘都是矮的在前,高的在後。如當n=5,k=3時,假設5人從矮到高分別標為1、2、3、4、5,則(1,5,2,3,4)、(2,3,1,5,4)、(3,1,4,2,5)都是可行的排法。小sin想知道總共有多少種可行排法。由於結果可能很大,請輸出排法數mod 1799999的值。
動態規劃,f[i][j]表示i個數,j對同學。從後往前推,如果在已有的四個數中插入第五個數,插在最後面的話對數不變,插在倒數第二個數與倒數第乙個數中時對數加1(插入的數比原數列任何乙個數都大),以此類推,得到遞推關係式:
f[i][j]=f[i-1][j]+f[i-1][j-1]+……+f[i-1][j-i+1](若j-i+1<0,則到0停止)
**:#include
#include
#include
int f[102][5000];
int main()
for(i=1;i<=n;i++)
for(int j=2;j<=i*(i-1)/2;j++)
else
for(int k=0;k<=j;k++)
}printf("%d",f[n][m]%1799999);
} 是不是很簡單??這個**已經可以accept,但你若想在6b一點的話。。
f[i][j]=f[i-1][j]+f[i-1][j-1]+……+f[i-1][j-i+1]
同理:f[i][j-1]=f[i-1][j-1]+f[i-1][j-2]+……+f[i-1][j-i]
兩式相減得f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1],可優化,注意j、i大小。
第三題:科技節
一年一度的科技節即將到來。同學們報名各項活動的名單交到了方克順校長那,結果校長一看皺了眉頭:這幫學生熱情竟然如此高漲,每個人都報那麼多活動,還要不要認真學習了?!這樣不行!……於是,校長要求減少一些活動,使每位學生只能參加一項(一名同學要參加某活動,必須已報名且該活動未被去掉)。當然,他也不希望哪位同學因此不能參加任何活動。他想知道自己的方案能否實行。
去掉活動=選擇活動
先將每個活動按參加人數多少排序(可能參加人數多的活動被選的機率大),搜尋。每搜一排時,判斷如果參加這一排的學生已經選了其他活動(之前搜過),則不選這個活動。普通搜尋過60%,如果使用位運算可accept。
**:#include
#include
#include
using namespace std;
long act[20];
long g[20][10];
long n,m;
bool judge;
void dfs(long p,long se[10],long num)
long t[10],k;
for(k=0;k<10;k++)
if(k==10)dfs(p+1,t,num+act[p]);
if(!judge)dfs(p+1,se,num);
}main()}}
for(i=0;ifor(j=i+1;jif(act[i]
}dfs(0,g[19],0);
if(judge==1)printf("yes\n");
else printf("no\n");
}return 0;}
計數 NOIP2016提高A組模擬7 15
樣例輸入 2 10 樣例輸出 90資料範圍 剖解題目 題目說的很明了了。思路 求方案數,一般會設計道dp,規律之類的。解法 數字dp,設f i j 表示當前到了第i位,這一位的數字是j的方案數。自然有 f i j f i 1 l f i j 0 l k 且 l 0 and j 0 看到這位數,很明顯...
NOIP模擬題 連通
給定乙個無向圖,請編寫乙個程式實現以下兩種操作 1 d x y,從原圖中刪除連線x和y頂點的邊。2 q x y,詢問x和y頂點是否連通。這也是連通問題,考慮用並查集解決。但是這是刪除的問題耶,怎麼辦?考慮將刪除變為連通,能不能將所有操作給反過來,從最後乙個操作開始處理。當然是可以的。include ...
Noip模擬題 山峰
description在n m的棋盤上不重複的填1到n m 如果乙個數字比周圍的八個數字大,那麼他就是乙個山峰。現在告訴你所有山峰的位置,問你填數的方案數mod 12345678 input 輸入第一行兩個數字 n m意義如題目描述。接下來n 行,每行 m個字元,表示非山峰,x 表示山峰。1 n 4...