題目:
一開始想 n^3 貪心來著;
先按 x 排個序,那麼第乙個不就一定要打了麼?
在列舉後面某乙個,和它形成一條拋物線,選能順便打掉最多的那個;
然後連樣例都過不了...
#include#include囧仔細想想,貪心可能是錯的;#include
#include
#include
#define eps 1e-9
using
namespace
std;
intt,n,m,ans;
bool vis[20
];struct
np[20
];bool cmp(n x,n y)
intmain()
if(cnt>mx)mx=cnt,aa=a,bb=b;
}if(aa||bb)
for(int j=i+1;j<=n;j++)
if(fabs(aa*p[j].x*p[j].x+bb*p[j].x-p[j].y)1
; ans++;
}printf(
"%d\n
",ans);
}return0;
}
正解是狀壓dp,dp真是與貪心相對的正確解法啊...
n 很小,所以想到狀壓,記錄所有可能的拋物線的打豬情況;
然後類似揹包轉移即可...
**如下:
#include#include#include
#include
#include
#define eps 1e-8
using
namespace
std;
int t,n,m,f[262900],g[500
],tot;
double x[20],y[20
];bool ck(int k,double a,double
b)int
main()
for(int i=0;i1
<
sort(g+1,g+tot+1
); tot=unique(g+1,g+tot+1)-g-1
; memset(f,
0x3f,sizeof f); f[0]=0
;
for(int i=0;i
for(int j=1;j<=tot;j++)
f[i|g[j]]=min(f[i|g[j]],f[i]+1
); printf(
"%d\n
",f[(1
<1
]); }
return0;
}
洛谷 P2831 憤怒的小鳥
kiana最近沉迷於一款神奇的遊戲無法自拔。簡單來說,這款遊戲是在乙個平面上進行的。有一架彈弓位於 0,0 處,每次kiana可以用它向第一象限發射乙隻紅色的小鳥,小鳥們的飛行軌跡均為形如 當小鳥落回地面 即x軸 時,它就會瞬間消失。在遊戲的某個關卡裡,平面的第一象限中有n只綠色的小豬,其中第i只小...
洛谷p2831憤怒的小鳥
原題 每個豬的位置不同,所以不能簡單的表示出狀態,all i 表示第i個拋物線打掉了哪些豬,其值本身儲存狀態 二進位制 只需要找所有有用的拋物線,然後狀壓f i 表示i狀態下最少用掉的鳥,轉移方程見 其中的m可以用來優化。雖然長,但是比較好懂。include include include incl...
洛谷 P2831 憤怒的小鳥
狀壓dp text dpn 18 n leq 18 n 18 不是暴搜就是狀壓,因為我jio jioji o得狀壓會比較好理解,所以就寫一篇狀壓的題解叭 首先我們要預處理出經過任意兩點的拋物線可以擊中的小豬有哪些,可以用lin e i j line i j line i j 來表示經過i,j i,j...