摘要:
《训练指南》p.108#include #include #include using namespace std;const int MOD = 1000007;const int MAXN = 500;int C[MAXN][MAXN];void init(){ memset( C, 0, sizeof(C) ); C[0][0] = 1; for ( int i = 0; i < MAXN; ++i ) { C[i][0] = C[i][i] = 1; for ( int j = 1; j < i; ++j ) C[i][... 阅读全文
posted @ 2013-09-11 21:42
冰鸮
阅读(188)
评论(0)
推荐(0)
摘要:
统计正面看高度为i的竖条个数为cnt1[i],统计侧面看高度为i的竖条个数为cnt2[i];ans = sum( i * max( cnt1[i], cnt2[i] ) ); ( 1 #include #include #include using namespace std;int cnt1[30];int cnt2[30];int main(){ int W, D; while ( scanf( "%d%d", &W, &D ), W || D ) { memset( cnt1, 0, sizeof(cnt1) ); memset( cnt2,... 阅读全文
posted @ 2013-09-11 20:54
冰鸮
阅读(261)
评论(0)
推荐(0)
摘要:
主要是建图,建好图之后跑一边dijkstra即可。一共3N个点,1~N是原图中的点1~N,然后把每层x拆成两个点(N+x)[用于连指向x层的边]和(N+N+x)[用于连从x层指出的边]。相邻层节点互相可达:AddEdge( N+N+x+1, N+x, C), AddEdge( N+N+x, N+x+1, C);对于位于x层的节点i,AddEdge(N+x, i, 0), AddEdge(i, N+N+x, 0);#include #include #include #include #include using namespace std;const int MAXN = 100010*3;c 阅读全文
posted @ 2013-09-11 20:32
冰鸮
阅读(344)
评论(0)
推荐(0)

浙公网安备 33010602011771号