一開始以為是找規律,寫了個樸素的,沒找到規律。
忘dp上想,想著想著就出思路了。
一開始dp[i][j]表示用用i個素數的和為j的方案。
把乘和加寫到一起dp[i][j][k]。在統計的時候++或**會有重複。
這樣,對於2*3*5 ,2*5*3,3*5*2重複三次,而2*2*5只重複兩次,那麼2*2*5要多加一次。
另外注意判斷三個數相同的情況。唉,比賽的時候就差了乙個點就寫對了,真可惜。
#include #include #include #include #include #include #include #include #include #include using namespace std;
#define l(t) t<<1
#define r(t) t<<1|1
#define eps 1e-7
typedef long long ll;
const int inf=1000000010;
const int maxn=80001;
const int mod=1000000007;
bool a[maxn];
ll prim[maxn],tot;
ll dp[3][2][maxn][2];
void init()
{ a[0]=1;
a[1]=1;
for(int i=2;i
2013 長沙網路賽J題
思路 這題對於其他能退出所有值的情況比較好像,唯一不能確定的是xxoxxoxxoxx這個形式的序列,其中xx表示未知,o表示已知。我們令num 1 0,那麼num 4 sum 3 sum 2 num 1 可以遞推,num i sum i 1 sum i 2 num i 3 i 3 1 這樣求出來的每...
2013長沙現場賽C Collision
題意 圓的座標是 0,0 給它的半徑,再給乙個範圍半徑,再給乙個硬幣的座標和它的半徑,還有他的速度向量,問這個硬幣在給定範圍裡面待了多久。硬幣碰到圓會彈開。這道題直接畫圖推公式就好了,下面給 include include include include include include includ...
2013 ACM ICPC 長沙網路賽J題
題意 乙個數列,給出這個數列中的某些位置的數,給出所有相鄰的三個數字的和,數列頭和尾處給出相鄰兩個數字的和。有若干次詢問,每次問某一位置的數字的最大值。分析 設數列為a1 an。首先通過相鄰三個數字的和我們可以求出a3,a6,a9 是多少。a3 sum a1,a2,a3 sum a1,a2 a6 s...