對於不定方程a1+a2+…+ak-1+ak=g(x),其中k≥2且k∈n,x是正整數,g(x)=x^x mod 1000(即x^x除以1000的餘數),x,k是給定的數。我們要求的是這個不定方程的正整數解組數。
定義f(p, rest)為第p個數,p及p後面的數的和為rest的解的數量,遞迴式為:f(p, rest)=if(rest==0)0 else if (p == k) rest else sum foreach curval(0不用高精度,本方法能得40分。
curval<=rest就可以了,反正如果curval大了以後也能返回0,不要擅自進一步縮小curval的範圍。
#include #include using namespace std;#define ll long long
#define _ndebug
const int max_k = 110, max_x = 1010, p = 1000;
ll f[max_k][max_x];
ll k, x;
ll mult(ll a, ll b, ll p)
return ans;
}ll power(int a, int n, int p)
return ans;
}ll dp(int p, ll rest)
int main()
把x^x%1000看作乙個線段,a1,a2...看作乙個個隔板劃分出的區域,這就是組合數學中的隔板模型,最終結果為c(k,x^x%1000)
#include #include #include using namespace std;#define ll long long
const int max_k = 110, max_x = 1010, p = 1000, base = 10000, carry = 4, max_len = 1010;
ll k, x;
ll mult(ll a, ll b, ll p)
return ans;
}ll power(int a, int n, int p)
return ans;
}struct bigint
void set(int x)
while (a[len] == 0 && len > 0)
len--;
} bigint()
bigint operator = (const int x)
bigint operator = (const bigint &a)
void print()
bigint operator += (const bigint &a)
if (a[len + 1])
len++;
return *this;
} bigint operator + (const bigint &a) };
bigint comb(int r, int n)
} return c[r];
}int main()
洛谷 P1771 方程的解
這道題是組合數的知識,就是讓我們求k個正整數加起來等於xx 1000的方案有多少種 由於我們是要找正整數,所以肯定不會有0,所以就把xx 1000用隔板法分成k份,這樣得到就是c k 1,xx 1000 1 因為這個數範圍比較大,所以我們需要高精度處理 ac 如下 include using nam...
VIJOS 1371 方程的解
對於不定方程a1 a2 ak 1 ak g x 其中k 2 x是正整數,g x x x mod 1000 x,k是給定的數.我們要求的是這個不定方程的正整數解組數.舉例來說,當k 3,x 2時,g x 4,原方程即a1 a2 a3 4.這個方程的正整數解有3組.分別為 2,1,1 1,2,1 1,1...
onecode題庫10202 方程的解
10202 方程的解 時間限制 1000 ms 記憶體限制 131072 kb 提交總數 49 ac總數 13 問題描述 這是一道簡單的數學題,有這樣乙個方程 x 3 5x 2 10x 80 y,告訴你y的值,你能求出根x1的值麼?輸入格式 輸入乙個整數y,y的取值範圍在 80,80 輸出格式 輸出...