題目描述
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行的資料...