標(biāo)題:倍數(shù)問題
【題目描述】
眾所周知,小蔥同學(xué)擅長計(jì)算年栓,尤其擅長計(jì)算一個數(shù)是否是另外一個數(shù)的倍數(shù)澈驼。但小蔥只擅長兩個數(shù)的情況吃型,當(dāng)有很多個數(shù)之后就會比較苦惱。現(xiàn)在小蔥給了你 n 個數(shù)秸脱,希望你從這 n 個數(shù)中找到三個數(shù),使得這三個數(shù)的和是 K 的倍數(shù),且這個和最大擒悬。數(shù)據(jù)保證一定有解。
【輸入格式】
從標(biāo)準(zhǔn)輸入讀入數(shù)據(jù)稻艰。
第一行包括 2 個正整數(shù) n,?K懂牧。
第二行 n 個正整數(shù),代表給定的 n 個數(shù)尊勿。
【輸出格式】
輸出到標(biāo)準(zhǔn)輸出僧凤。
輸出一行一個整數(shù)代表所求的和。
【樣例入】
4 3
1 2 3 4
【樣例輸出】
9
【樣例解釋】
選擇2元扔、3躯保、4。
【數(shù)據(jù)約定】
對于 30% 的數(shù)據(jù)摇展,n <= 100吻氧。
對于 60% 的數(shù)據(jù),n?<= 1000咏连。
對于另外 20% 的數(shù)據(jù)盯孙,K?<= 10。
對于 100% 的數(shù)據(jù)祟滴,1 <= n?<= 10^5,?1 <= K?<= 10^3振惰,給定的 n 個數(shù)均不超過 10^8。
資源約定:
峰值內(nèi)存消耗(含虛擬機(jī)) < 256M
CPU消耗 < 1000ms
請嚴(yán)格按要求輸出垄懂,不要畫蛇添足地打印類似:“請您輸入...” 的多余內(nèi)容骑晶。
注意:
main函數(shù)需要返回0;
只使用ANSI C/ANSI C++ 標(biāo)準(zhǔn);
不要調(diào)用依賴于編譯環(huán)境或操作系統(tǒng)的特殊函數(shù)痛垛。
所有依賴的函數(shù)必須明確地在源文件中 #include <xxx>
不能通過工程設(shè)置而省略常用頭文件。
提交程序時桶蛔,注意選擇所期望的語言類型和編譯器類型匙头。
#include<bits/stdc++.h>
using namespace std;
int a[10005];
int b[10005];
int vis[10005];
int n,k;
int ans;
void dfs(int x)
{
if(x==3)
{
if((b[0]+b[1]+b[2])%k==0)
ans=max(ans,b[0]+b[1]+b[2]);
return;
}
for(int i=0; i<n; i++)
{
if(vis[i]==0)
{
b[x]=a[i];
vis[i]=1;
dfs(x+1);
vis[i]=0;
}
}
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
dfs(0);
cout<<ans<<endl;
}