DFS hash 方程的解數

2021-08-13 06:02:10 字數 1280 閱讀 5041

題目描述

input

第1行包含乙個整數n。第2行包含乙個整數m。第3行到第n+2行,每行包含兩個整數,分別表示ki和pi。兩個整數之間用乙個空格隔開。第3行的資料對應i=1,第n+2行的資料對應i=n。

output

僅一行,包含乙個整數,表示方程的整數解的個數。

資料範圍

1≤n≤6

1≤m≤150

所有值的絕對值加起來不超過2^31-1

分析

首先我們看到資料範圍

m為150,那麼這題可能要列舉了

但是n為6,150^6絕壁**的,我們要想辦法簡化時間。

這時候我們看向150^3這個數,它小於1000萬,而且剛好是最大範圍的一半,肯定有什麼意義。

仔細想一想,如果前面半邊的數為s,那麼後面得到-s就可以得到0了

這題就轉換為150^3的列舉前三個數的可能總值,然後再列舉一次150^3後三個數,把它轉為相反數以後雜湊尋找就行啦

總時間複雜度:o(2*150^3)

#include 

#include

#include

using

namespace

std;

int n,m,k[7],p[7],h[4000037][2],i,j,q=4000037;

long

long mc[151][31],ans;

long

long loc(long

long x)

void ins(long

long x)

void mem(long

long x)

void dqz(int x,long

long s)

else

for (i=1;i<=m;i++)

dqz(x+1,s+k[x]*mc[i][p[x]]);

}void dzz(int x,long

long s)

else

for (i=1;i<=m;i++)

dzz(x+1,s+k[x]*mc[i][p[x]]);

}int main()

for (i=1;i<=30;i++)

mc[1][i]=1;

for (i=2;i<=m;i++)

dqz(1,0);

dzz(n/2+1,0);

printf("%lld",ans);

}

方程的解數

蒜頭君在求解乙個 n n 元的高次方程 displaystyle k 1x 1 k 2x 2 ldots k nx n 0k1 x1p 1 k2 x 2p2 kn x npn 0其中 x 1,x 2,ldots,x nx1 x2 xn 是未知數,k 1,k 2,ldots,k nk1 k2 kn 是...

方程的解數

問題描述 蒜頭君在求解乙個 n 元的高次方程 假設未知數 1 xi m,i 1 n。你能幫蒜頭君算出這個方程的整數解個數嗎?輸入格式 第一行輸入乙個整數 n 1 n 4 第二行輸入乙個整數 m 1 m 150 第 3 行到第 n 2 行,每行輸入兩個整數,分別表示 k k 20 pi 1 pi 4 ...

方程的解數 difficult

已知乙個n元高次方程 k1x1p1 k2x2p2 knxnpn 0 假設未知數1 xi m,i 1,n,求這個方程的整數解的個數。第1行包含乙個整數n。第2行包含乙個整數m。第3行到第n 2行,每行包含兩個整數,分別表示ki和pi。兩個整數之間用乙個空格隔開。第3行的資料對應i 1,第n 2行的資料...