非常絕望的一次測試。早上狀態很不好呀,t1卡了乙個多小時沒想出正解,後面就慌了。
以此部落格紀念一下這次悲傷的考試。
t1 組合數問題
實際上就是楊輝三角做dp,先預處理出組合數,mod k防止爆掉,然後用相同的三角形結構更新dp值,dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1],如果組合數mod k的值等於0,就++.
#include
#include
using
namespace
std;
int yh[2005][2005], dp[2005][2005];
int main ( )
for ( int kk = 1; kk <= t; kk ++ )
}
t2 蚯蚓
三個不上公升序列,第乙個存原始蚯蚓長度,第二個存切後xq,第三個存x-xq,先sort一邊q1,每次取三個佇列隊首切,切了後推入第
二、三個佇列,可以證明二三序列一定不上公升。
但是q2、q3的h2、h3和h1不一樣,h1存的是q1隊首,h2、h3存q1、q2隊首的前一項,因此判斷隊空是h2
#include
#include
#include
using namespace std;
#define ll long long
const int n = 7000005;
ll q1[n], q2[n], q3[n], h1, h2, h3, t2, t3, t1;
bool cmp ( const ll &a, const ll &b )
int judge ( )
int main ( )
else
if ( xx == 2 )
else
if ( xx == 3 )
a = a + (i-1)*q;
if ( i % t == 0 ) printf ( "%lld ", a );
ll x = a*u/v; ll y = a-x;
q2[++t2] = x-i*q;
q3[++t3] = y-i*q;//相當於標記了每次切的蚯蚓
}printf ( "\n" );
for ( int i = 1; i <= n+m; i ++ )
else
if ( x == 2 )
else
if ( x == 3 )
a = a + m
*q;//最後一起加上理應加的總時間,如果被切過k次實際加上的是(m-k)*q.
if ( i % t == 0 ) printf ( "%lld ", a );
}return
0;}
t3 憤怒的小鳥
做過的一道狀壓dp!!可是還是爆零了!!!
有點小難受。。
先預處理出任意兩點拋物線能打到的豬豬,狀壓儲存。再遍歷所有當前狀態,更新加上能打到的豬豬後的狀態。注意處理浮點數精度。
#include
#include
#include
#include
using
namespace
std;
double x[20], y[20];
int dp[1
<<18+1], f[20][20];
bool check ( int i, double a, double b )
int main ( )
for ( int i = 1; i <= n; i ++ )
f[i][i] = 1
<<(i-1);
dp[0] = 0;
for ( int i = 1; i <= n; i ++ )
for ( int j = 1; j <= n; j ++ )
for ( int s = 0; s < (1
dp[s] + 1 )
dp[s|f[i][j]] = dp[s] + 1;
printf ( "%d\n", dp[(1
<1] );
}return
0;}
可是有dalao用搜尋搞出來了!!據說還比狀壓快!!%%%
#include
#include
#include
#include
#include
#define mem(a, b) memset (a, b, sizeof(a))
#define dd double
using namespace std;
const int n = 45;
const dd pd = 1e-10;
int t, n, m, ans, q[n];
dd fc[n][2];
bool vis[n];
struct point a[n];
const bool cmp (point aa, point bb)
dd abss (dd a)
void dfs (int
x, int num1, int num2, int
use)
if (use >= ans) return;
dd yy;
for (int i = 1; i <= num2; i++)
}int now, nxt = num2 + 1;
dd xx, cc;
for (int i = 1; i <= num1; i++)
q[num1 + 1] = x;
vis[num1 + 1] = 0;
dfs (x + 1, num1 + 1, num2, use + 1);
}int main ()
sort (a + 1, a + n + 1, cmp);
mem (vis, 0);
mem (fc, 0);
mem (q, 0);
q[1] = 1;
if (m != 1) ans = n;
else
dfs (2, 1, 0, 1);
printf ("%d\n", ans);
}return
0;}
下個星期要翻身!!繼續努力!! 蚯蚓 NOIP2016D2T2 單調佇列
本題中,我們將用符號 c 表示對c向下取整,例如 3.0 3.1 3.9 3。蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓們沒辦法,蛐蛐國王只好去請神刀手來幫他們消滅蚯蚓。蛐蛐國裡現在共有n只蚯蚓 n為正整數 每只蚯蚓擁有長度,我們設第i只蚯蚓的長度為a i i 1,2,n 並保證所有的長度都是非...
noip普及2016總結
事實上,我在去年也報了noip的普及組.奈何當年太稚嫩,不懂騙分,只有210.以上都是前話,滿滿的都是不堪回首的黑歷史.1.概述 考前算是做了比較充分的準備吧,至少在每天晚自習都會抽幾分鐘的時間複習一下 事實上功課也並沒有怎麼耽誤 然後就是臨場發揮還是較好吧,可以根據自己的能力與資料的大小寫出合適的...
NOIP2016 D2 T3 憤怒的小鳥
看了題解之後知道,是狀壓dp。一 首先預處理乙個 2 n 次方的fpow陣列 fpow 0 1 for rint i 1 i 19 i fpow i fpow i 1 1 二 然後預處理乙個sta i j 表示經過o,i,j三點的那條拋物線經過的所有的點的狀態,處理時要注意 1 拋物線的 a 值大於...