原创 HDU4599 Dice概率期望DP

這題有三個函數, F(N)表示有數字連續向上N次操作數的期望值; H(N)表示數字1連續向上N次操作數的期望值; G(N)表示數字1向上N次的操作數的期望值; 題目給定N求,滿足G(m1)>=F(N)的最小m1與G(m2)>=F(N)的小

原创 POJ3358 Period of an Infinite Binary Expansion

該題要處理好一些細節。 #include<stdio.h> #include<math.h> int gcd(int a,int b){return b==0?a:gcd(b,a%b);} int phi(int a){ int l=

原创 POJ2515 Birthday Cake構建差分表

本題題意是求1到n的m方和。 思路:構建差分表,利用牛頓公式求和。 由於多處涉及到高精度,直接利用java的biginteger包。 import java.util.Scanner; import java.io.*; import

原创 HDU5017 Ellipsoid 模擬退火

這是第一次接觸模擬退火,感覺挺棒的。 #include<stdio.h> #include<math.h> #define INF 1e30 double a,b,c,d,e,f; double getz(double x,double

原创 HDU4035 Maze 概率DP+圖

思路:列出狀態轉移方程,並設出其一般通式。注意:該通式應有三個變量(可以從導致死循環的個數考慮); #include<stdio.h> #include<string.h> #include<vector> #include<math.h

原创 uva 10237 Bishops 黑白染色處理

題意:在n*n行棋盤裏放置k個棋子,要保證這些棋不在同一斜行,問有多少种放置方式。 方法:黑白染色,黑白格子之間相互不影響。 用dp[i][j]表示第i斜行放置j個棋子,c[i]表示第i斜行有多少棋子。 #include<iostream

原创 hdu 1114 Piggy-Bank 完全揹包

用滾動數組寫好像寫法很簡潔,但這次我試着用二維數組寫Orz...還真出了好多問題..所幸最後還是AC了... #include<stdio.h> #include<string.h> #include<math.h> #define ma

原创 POJ2034 Anti-prime Sequences初等數論

題目是求從n到m字典序最小的且任意連續2,3,,d個數的和都是合數的序列。 用dfs即可。 #include<stdio.h> #include<string.h> #define maxn 10002 #define maxm 1002

原创 SPOJ1811 Longest Common Substring後綴自動機

題意:求兩字符中的最長公共子串 思路:其中一串建立後綴自動機,另一串來跑自動機,並記錄當前節點的深度#include <stdio.h> #include <stdlib.h> #include <vector> #include <al

原创 POJ1151 Atlantis掃描線求矩形面積

    關於線段樹掃描線的題目放了很久了,一直都沒碰它。今天偶然想起這個來,就拿出來研究了。。其實不難,只要算出每個時刻的掃描線總長即可。     但這題還是WA了幾次。其中,有每例輸出沒空行的問題,也有數組開太小的問題。 #inclu

原创 HDU5037 frog貪心

這題雖說不是很難,但在推理時實在把自己繞暈了。 這題採用貪心的作法。 我是從終點開始考慮的。 假設當前位置爲cur,前一次走的位置爲pre. 若此時pre-a[i]>l則下一步pre=cur,cur=pre-l-1; 否則cur=a[i]

原创 POJ2739 Sum of Consecutive Prime Numbers素數打表

思路比較簡單,就是運用了一公式a(m)-a(n)=t。遍歷其中一個變量,用二分找另一個變量。 #include<stdio.h> #include<string.h> #define maxn 10001 int pr[maxn],sav

原创 POJ1811 Prime Test大素數判定與因式分解

說實在的,這題當初完全不懂。上網查了別人的AC代碼,感覺也沒看懂。後來,一怒之下,把算法導論買了。。。看完相關知識後,才發覺,沒有想象中的複雜。。 但話又說回來,其實因式分解這一塊還是比較難的。但在這題,只要求最小素因子,所以比較簡單。其

原创 HDU5012 Dice dfs

#include<stdio.h> #include<string.h> #include<iostream> using namespace std; int a[4][2],b[4][2]; int vis[700000]; int

原创 POJ1150 The Last Non-zero Digit

#include<stdio.h> int get(int n,int x) { int s=0; while(n) { s+=n/x; n/=x; } return s; } int g(int n,int x) {