POJ 3253 Fence Repair STL堆操作
我想说,STL里堆是我目前见到最蛋疼的操作。


#include#include #include #include #include #include #include #include #include #include
POJ 3254 Corn Fields 状态压缩递推
uc[]表示相邻两位不同时为1的情况,377种,因此n*377^2即可
注意,位运算优先级是低于==的!


#include#include #define MOD 100000000 int n,m,a[20],k; int uc[500],all; int f[20][5000]; int main() { scanf("%d%d",&n,&m); for(int i=0; i ) for(int j=0; j ) { scanf("%d",&k); a[i]=(a[i]<<1)+k; } for(int i=0; i<(1< ) { int tmi=i,flag=0; while(tmi) { if((tmi&3)==3) flag=1; tmi>>=1; } if(!flag) { uc[all++]=i; if((i|a[0])==a[0]) f[0][i]=1; } } for(int i=1; i ) for(int j=0; j ) if((a[i]|uc[j])==a[i]) { for(int k=0; k ) if(!(uc[j]&uc[k])) { f[i][uc[j]]=(f[i][uc[j]]+f[i-1][uc[k]])%MOD; } } int ans=0; for(int j=0; j ) ans=(ans+f[n-1][uc[j]])%MOD; printf("%d\n", ans); return 0; }
POJ 3255 A*算法求第k短路
第一次接触A*,了解了下。
—————————————————维基百科————————————————————————————
如果以 g(n)表示从起点到任意顶点n的实际距离,h(n)表示任意顶点n到目标顶点的估算距离,那么 A*算法的公式为:f(n)=g(n)+h(n)。 这个公式遵循以下特性:
- 如果h(n)为0,只需求出g(n),即求出起点到任意顶点n的最短路径,则转化为单源最短路径问题,即Dijkstra算法
- 如果h(n)<=“n到目标的实际距离”,则一定可以求出最优解。而且h(n)越小,需要计算的节点越多,算法效率越低。
—————————————————————————————————————————————————


#include#include #include #include #include #include #include #include #include #include