NOIP2010解題報告

2021-07-05 03:44:50 字數 2210 閱讀 6834

t1 機器翻譯

t2 烏龜棋

t3 關押罪犯

t4 引水入城

題解:

一套不算太難的noip題目。

第一題直接暴力模擬佇列的工作即可。

#include

#include

#include

#include

#include

#include

using namespace std;

intq[10100];

int in()

int main()

if (!f)

}printf("%d\n",s);

return

0;}

第二題我寫的是 404

的dp,轉移方程顯然:

f[i][j][k][l]表示當前用了i張1步的,j張2步,k張3步,l張4步。

f[i][j][k][l]=max(f[i-1][j][k][l],f[i][j-1][k][l],f[i][j][k-1][l],f[i][j][k][l-1])+a[i+2×j+3×k+4×l]。

#include

#include

#include

#include

#include

#include

using

namespace

std;

int f[50][50][50][50]=,a[400],b[6];

int in()

int main()

printf("%d\n",f[b[1]][b[2]][b[3]][b[4]]);

return

0;}

第三題並查集,把所有的衝突按照值從大到小排序,然後每乙個衝突的兩端加進兩個不同的集合,直到出現衝突,此時這個衝突的值就是我們最終分配完後出現的最大的那個衝突值,輸出即可,如一直沒有衝突,就輸出0了。

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct sa[100010];

int n,nn,m,fa[40010];

int in()

bool cmp(s a,s b)

int find(int x)

int main()

}printf("0\n");

return

0;}

第四題開始想到了正常解法,後來腦抽想去搞乙個最短路(**於費用流的啟發)。。於是頹了很久,後來還是寫了正常的做法。。寫完後去看了一下題解,發現好像真的可以跑最短路(囧。。)

說一下正常做法:

首先把第一行入隊,bfs一遍,看最後一行是否全都能訪問到,不能就直接輸出0和不能訪問的個數,否則就重新對於第一行的每個點dfs(bfs一樣。。懶的寫兩遍了。。)一遍,然後統計一下它能訪問到的最後一行的區間(這個一定是連續的,可以證明。。但我是腦補出來的。。),然後就是經典線段覆蓋的dp了。

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define n 1001000

#define m 600

struct qq[n];

struct ee[m];

int dx[6]=,dy[6]=;

int n,m,f[m],a[m][m]; bool vis[m][m];

int in()

void bfs();

vis[1][i]=true;

}while (hfor (int i=0; i<4; i++)

}}void init()

}void dfs(int xu,int x,int y)

for (int i=0; i<4; i++)

}void dp()

}int main()

dp(); printf("%d\n",f[m]);

return

0;}

NOIP 2010 普及組解題報告

題目分析 一 數字統計 此題,曾經在某oj上看到過原題。要求和實現都非常簡單。無非是,列舉出所有在範圍內的數字,然後對數字進行拆分,對每一位數字進行判斷。乙個樸素的for迴圈,巢狀乙個while迴圈,就可以解決這道題目。下面是程式的核心部分 for i l i r i 此題丟分,絕對可以認為是絕不應...

NOIP2010 烏龜棋 解題報告

小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。烏龜棋的棋盤是一行n個格仔,每個格仔上乙個分數 非負整數 棋盤第1格是唯一的起點,第n格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。烏龜棋中m張爬行卡片,分成4種不同的型別 m張卡片中不一定包含所有4種型別的卡片,見樣例 每種型別的卡片上分...

NOIP 2010 普及組解題報告

題目分析 一 數字統計 此題,曾經在某oj上看到過原題。要求和實現都非常簡單。無非是,列舉出所有在範圍內的數字,然後對數字進行拆分,對每一位數字進行判斷。乙個樸素的for迴圈,巢狀乙個while迴圈,就可以解決這道題目。下面是程式的核心部分 for i l i r i t i while t 0 y...