1. 程式人生 > >【openjudge】糖果

【openjudge】糖果

描述 由於在維護世界和平的事務中做出巨大貢獻,Dzx被贈予糖果公司2010年5月23日當天無限量糖果免費優惠券。在這一天,Dzx可以從糖果公司的N件產品中任意選擇若干件帶回家享用。糖果公司的N件產品每件都包含數量不同的糖果。Dzx希望他選擇的產品包含的糖果總數是K的整數倍,這樣他才能平均地將糖果分給幫助他維護世界和平的夥伴們。當然,在滿足這一條件的基礎上,糖果總數越多越好。Dzx最多能帶走多少糖果呢?
注意:Dzx只能將糖果公司的產品整件帶走。 輸入 第一行包含兩個整數N(1<=N<=100)和K(1<=K<=100)
以下N行每行1個整數,表示糖果公司該件產品中包含的糖果數目,不超過1000000 輸出 符合要求的最多能達到的糖果總數,如果不能達到K的倍數這一要求,輸出0 樣例輸入
5 7
1
2
3
4
5
樣例輸出
14
提示 Dzx的選擇是2+3+4+5=14,這樣糖果總數是7的倍數,並且是總數最多的選擇。

這道題是揹包的一個變形,揹包的體積需要%一個數。

剛開始的思路是寫一個恰放入的揹包,然後列舉一下,但是發現那樣的話體積的最大值達到了10^8,無論是時間還是空間都無法承受。

那麼考慮一下優化。其實%已經給我們提供了一個思路,那就是把體積縮小到需要%的這個正整數。

f[i][j]表示前i個物品體積%k為j的最優值,我們可以得到狀態轉移方程。注意每一次都要更新,因為每個數%k的值是不確定的。

【程式碼】

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,k;
int a[105],f[105][105];
int main(){
	scanf("%d%d",&n,&k);
	memset(f,0,sizeof(f));
	for(int i=1;i<=n;i++)
	  scanf("%d",&a[i]);
	for(int i=1;i<=n;i++){
		for(int j=0;j<=k-1;j++) f[i][j]=f[i-1][j];
		for(int j=0;j<=k-1;j++)
		  f[i][(f[i-1][j]+a[i])%k]=max(f[i][(f[i-1][j]+a[i])%k],f[i-1][j]+a[i]);
	}
	printf("%d",f[n][0]);
}


相關推薦

openjudge糖果

描述 由於在維護世界和平的事務中做出巨大貢獻,Dzx被贈予糖果公司2010年5月23日當天無限量糖果免費優惠券。在這一天,Dzx可以從糖果公司的N件產品中任意選擇若干件帶回家享用。糖果公司的N件產品每件都包含數量不同的糖果。Dzx希望他選擇的產品包含的糖果總數是K的整數

openjudgeC15C Rabbit's Festival CDQ分治+並查集

amp rabbit class printf sdn 題解 {} .net log 題目鏈接:http://poj.openjudge.cn/practice/C15C/ 題意:n 點 m 邊 k 天。每條邊在某一天會消失(僅僅那一天消失)。問每一天有多少對點可以相互到達

Bzoj2330Scoi2011糖果

int iostream efi bzoj data spfa ace www -1 題目鏈接:http://www.lydsy.com/JudgeOnline/problem.php?id=2330 這是一道比較裸的差分約束,這裏求的是最小值, 建立一個超級原點0,跑

WC2013糖果公園

stdin clu truct 分享圖片 mat 分享 val lan cto UOJ 題解:樹上莫隊轉移。 一開始UV打錯,WA了一發。 1 #include<cmath> 2 #include<cstdio> 3 #include

WC2013 糖果公園 - 樹上莫隊

最好 fin 結構 我們 .cn read i++ put href 【問題描述】 Candyland 有一座糖果公園,公園裏不僅有美麗的風景、好玩的遊樂項目,還有許多免費糖果的發放點,這引來了許多貪吃的小朋友來糖果公園遊玩。糖果公園的結構十分奇特,它由 n 個遊覽點構成

openjudge字符串+模擬1777:文件結構“圖”

不用 第一個 LG cstring \n 函數 算法分析 參數 i++ 【題目傳送門:】戳 【描述:】 在計算機上看到文件系統的結構通常很有用。Microsoft Windows上面的"explorer"程序就是這樣的一個例子。但是在有圖形界面之前,沒有圖形化的表示方法的,

BZOJ2330糖果

題目連結:https://www.lydsy.com/JudgeOnline/problem.php?id=2330   差分約束系統的模板題吧,一看題目各種不等式。。。 因為是要求最小值,所以我們選擇跑最長路好了。根據題目描述建邊,這個應該不難,x=1就是建從a到b和從b到a的邊權為0的

scoi2011糖果 P2242

Description 幼兒園裡有N個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww需要滿足小朋友們的K個要求。幼兒園的糖果總是有限的,lxhgw

貪心糖果傳遞(數軸上求一個點,使得n點到其距離之和最小,該點為n點中位數)

問題 K: 【貪心】糖果傳遞 時間限制: 1 Sec  記憶體限制: 128 MB 提交: 2  解決: 2 [提交] [狀態] [討論版] [命題人:admin] 題目描述 有n個小朋友坐成一圈,每人有ai個糖果。每人只能給左右兩人傳遞糖果。每人每次傳遞一個糖果代

OpenJudgec語言_A*B問題

描述 輸入兩個正整數A和B,求A*B。 輸入一行,包含兩個正整數A和B,中間用單個空格隔開。1 <= A,B <= 50000。 輸出一個整數,即A*B的值。 樣例輸入 3 4 樣例輸出 12 提示注意乘積的範圍和資料型別的選擇

openjudge魔獸世界(終極版)

第一行是取消vs的error用的 //#pragma warning(disable:4996) #include <iostream> #include <fstream> #include <cstdio> #include <

openjudge切割回文

描述 阿福最近對迴文串產生了非常濃厚的興趣。 如果一個字串從左往右看和從右往左看完全相同的話,那麼就認為這個串是一個迴文串。例如,“abcaacba”是一個迴文串,“abcaaba”則不是一個迴文串。 阿福現在強迫症發作,看到什麼字串都想要把它變成迴文的。阿福可以

openjudge素數環

問題 A(2266): 【基礎演算法】素數環 時間限制: 5 Sec 記憶體限制: 128 MB 提交: 224 解決: 102 [提交][狀態][我的提交] 題目描述 輸入正整數n,把整數1,2,3,…,n組成一個環,使得相鄰兩個整數之和均為素數

BZOJ2330SDOI2012糖果(差分約束,SPFA)

【BZOJ2330】【SDOI2012】糖果 題面 題目描述 幼兒園裡有N個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在

BZOJ2330SCOI2011糖果——差分約束系統+tarjan

題目連結 差分約束 這是一道經典的差分約束問題 我們假設最後第i個小朋友分得的糖果數為ai,ai∈N∗ 那麼對於約束條件:i分得的糖果少於j的,有ai<aj,由於ai是整數,可以變形為ai⩽aj+(−1) 同樣,對於ai⩽aj也可以看成a

openjudge小遊戲(求助)

描述 一天早上,你起床的時候想:“我程式設計序這麼牛,為什麼不能靠這個賺點小錢呢?”因此你決定編寫一個小遊戲。 遊戲在一個分割成w * h個正方格子的矩形板上進行。如圖所示,每個正方格子上可以有一張遊戲卡片,當然也可以沒有。 當下面的情況滿足時,我們認為兩個遊戲卡片之間

openjudge馬走日

描述 馬在中國象棋以日字形規則移動。 請編寫一段程式,給定n*m大小的棋盤,以及馬的初始位置(x,y),要求不能重複經過棋盤上的同一個點,計算馬可以有多少途徑遍歷棋盤上的所有點。 輸入 第一行為整數T(T < 10),表示測試資料組數。 每一組測試資料包含一

OpenJudgec語言_角谷猜想

/* 描述 所謂角谷猜想,是指對於任意一個正整數,如果是奇數,則乘3加1,如果是偶數,則除以2,得到的結果再按照上述規則重複處理, 最終總能夠得到1。如,假定初始整數為5,計算過程分別為16、8、4、2、1。 程式要求輸入一個整數,將

DFS采集糖果

while getc i++ == ++ dfs pan turn n) 讀入後存儲所有反向邊,這些反向邊一定構成一些基環外向樹,每頭牛可以采集到的糖果數等於基環大小加上它的深度 利用並查集可以在輸入的同時求出所有環,然後DFS所有環上的所有外向樹即可 1 #inclu

BZOJ4548小奇的糖果 set(鏈表)+樹狀數組

style string output num true 感覺 100% 接下來 bzoj 【BZOJ4548】小奇的糖果 Description 有 N 個彩色糖果在平面上。小奇想在平面上取一條水平的線段,並拾起它上方或下方的所有糖果。求出最多能夠拾起多少糖果,使