目錄幾道水題就不寫了....
把ax+by = z 的z按照模a剩餘系分類
由於\((a,b)=1\)所以對於每個\(k\in[0, a)\), \(k\cdot b\)都在不同剩餘系內!!(反證法)
那麼自然最大的取不到數在(a-1)*b的剩餘系內, 也就是\((a-1)*b - a = ab-a-b\)
orz gxz:
(記憶化搜尋?)
70分做法顯然
100分做法: 思想是把dp轉移抽象為dag
如果不是dag: 只要可轉移到終點的合法狀態不在環內就可以正常dp
否則puts("-1")
p.s. 只要在topsort中環加外向樹上的點(illegal points) 入度都大於0 , 所以topsort一遍就ok拉!!!
這道題卡常喪心病狂...
這個程式會re(60分)...不敢開longlong... 求dalao debug..
#includeusing namespace std;
typedef pairpii;
#define fi first
#define se second
#define pb push_back
#define rep(_i, _st, _ed) for(register int _i = (_st); _i <= (_ed); ++_i)
#define per(_i, _ed, _st) for(register int _i = (_ed); _i >= (_st); --_i)
inline int read()
const int maxn = 1e5+5, maxm = 3e5+5, mxk = 51;
int n, m, p;
//鄰接表
struct graphedge[maxm];
int head[maxn];
void adde(int u, int v, int w)
//精簡dijstra
priority_queuepq;
int dis[maxn]; bool vis[maxn];
void dijstra()}}
}int t, k;
const int mxhsh = maxn*mxk;
int f[mxhsh], ind[mxhsh], le[mxhsh], ri[mxhsh], cnt, pt[mxhsh], q[mxhsh];
#define hsh(_k, _u) ((_k)*n + _u)
#define mod(_cur) if(_cur > p) _cur -= p;
signed main()
dijstra();
//構建狀態轉移圖 (該題中為一種擴充套件最短路圖)
cnt = 1; memset(ind, 0, sizeof ind);
rep(u, 1, n) rep(x, 0, k)
ri[hsh(x, u)] = cnt - 1;
}//拓撲排序 + 狀態轉移
memset(f, 0, sizeof f);
f[hsh(0, 1)] = 1;
int fr = 1, bk = 0;
rep(i, 1, hsh(k, n)) if(!ind[i]) q[++bk] = i;//這句必須有!!常數再大也要加!!!
while(bk >= fr)
}//統計答案
int infini = 0, ans = 0;
rep(x, 0, k)
if(infini) puts("-1");
else printf("%d\n", ans);
}return 0;
}
正解\(o(3^nn^2)\)....
注釋很詳細了
//這題卡常!!!
#includeusing namespace std;
typedef pairpii;
#define fi first
#define se second
#define pb push_back
#define rep(_i, _st, _ed) for(register int _i = (_st); _i <= (_ed); ++_i)
#define per(_i, _ed, _st) for(register int _i = (_ed); _i >= (_st); --_i)
inline int read()
#define min(a, b) ((a) < (b)) ? (a) : (b) //注意在這個巨集定義中a, b都會算兩次
int f[13][10005];
int n, m, mat[15][15], log_2[10005], mincost[15];
signed main()
log_2[0] = 1;
rep(i, 1, n) log_2[(1 << i)] = i;
int mxsta = (1 << n) - 1, ans = 1e8;
memset(f, 0x2f, sizeof f);
rep(u, 0, n-1) f[0][(1
//不重複列舉補集的子集
for(int sub = rev; sub; sub = (sub-1) & rev)
//cout
rep(i, 0, n)
cout
}
noip2017解題報告題解
noip 2017 提高組題解 by 杜瑜皓 november 12,2017 1 math 輸出 ab a b。因為如果 x,y 是 ax by n 的一組解,那麼 x bt,y at 也是一組解,容易發現最大的不滿足的 x,y 為 1,a 1 b 1,1 即 n ab a b 無解。2 comp...
Noip2017普及組題解 成績(C )
牛牛最近學習了 c 入門課程,這門課程的總成績計算方法是 總成績 作業成績 20 小測成績 30 期末考試成績 50 牛牛想知道,這門課程自己最終能得到多少分。輸入只有 1 行,包含三個非負整數a b c,分別表示牛牛的作業成績 小測成績和期末考試成績。相鄰兩個數之間用乙個空格隔開,三項成績滿分都是...
NOIP2017 寶藏 題解(狀壓DP)
參與考古挖掘的小明得到了乙份藏寶圖,藏寶圖上標出了 nnn 個深埋在地下的寶藏屋,也給出了這 nnn 個寶藏屋之間可供開發的m mm 條道路和它們的長度。小明決心親自前往挖掘所有寶藏屋中的寶藏。但是,每個寶藏屋距離地面都很遠,也就是說,從地面打通一條到某個寶藏屋的道路是很困難的,而開發寶藏屋之間的道...