1. 程式人生 > >(資訊學奧賽一本通 1299)糖果#線性動態規劃#

(資訊學奧賽一本通 1299)糖果#線性動態規劃#

題意:給出n個數,找出若干個數,使它們的和為k的倍數,並輸出最大的數。

狀態轉移方程:f[i][j]表示前i個數%k=j的總數。

f[i][j]=max(f[i-1][j],f[i-1][tmp]+a[i]);

tmp=(k+j-a[i]%k)%k(避免負數)

第一種情況不選第i個數,第二種情況為選這個數時的最優值

(當然要滿足tmp=0或者f[i-1][tmp]有最優值)

#include<cstdio>
#include<algorithm>
using namespace std;
int a[101],n,k,f[101][101];
int main(){
scanf("%d%d",&n,&k);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
for (int i=1;i<=n;i++)
for (int j=0;j<k;j++){
f[i][j]=f[i-1][j];//不選的情況
int tmp=(k+j-a[i]%k)%k;//避免負數
if (!tmp||f[i-1][tmp]) f[i][j]=max(f[i][j],f[i-1][tmp]+a[i]);//推導
}
printf("%d",f[n][0]); //選n個數並且餘數為0的最優值。

        return 0;
}

相關推薦

資訊奧賽 1299糖果#線性動態規劃#

題意:給出n個數,找出若干個數,使它們的和為k的倍數,並輸出最大的數。狀態轉移方程:f[i][j]表示前i個數%k=j的總數。f[i][j]=max(f[i-1][j],f[i-1][tmp]+a[i]

信息奧賽 5.1 區間類動態規劃

fir ont sed ring tail getc sca ostream algorithm 石子合並[loj 10147] /* dp[i][j]=max or min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1])

信息奧賽 5.4 狀態壓縮動態規劃

har gif string cout lowbit -a 需要 names std #loj 10170. 「一本通 5.4 例 1」騎士 看數據範圍n<=10,所以不是搜索就是狀壓dp,又因為搜索會超時所以用dp dp[i][k][j]表示現已經放到第i行,前面

資訊奧賽C++版

2018年資訊學奧賽NOIP資料下載 資訊學奧賽一本通(C++版) 第一部分 C++語言 第一章 C++語言入門 //1000 入門測試題目 #include <stdio.h> int main(){ int a,b; scanf("%d%d",&a,&b)

資訊奧賽C++版第一部分 C++語言 第五章 陣列

第五章 陣列 第一節 一維陣列 T1102 : 與指定數字相同的數的個數 時間限制: 1000 ms 記憶體限制: 65536 KB 【題目描述】   輸出一個整數序列中與指定數字相同的數的個數。 【輸入】   輸入包含三行:   第一行為N(N≤100)N

資訊奧賽C++版第二部分 基礎演算法 第一章 高精度計算

第一章 高精度計算 模板在最後。 T1307 : 高精度乘法 時間限制: 1000 ms 記憶體限制: 65536 KB 【題目描述】 【輸入】 【輸出】 【輸入樣例】 【輸出樣例】 【答案&程式碼】 T1308 : 高精除 時間限制:

資訊奧賽C++版 第三部分 資料結構 第三章 樹

//1336 【例3-1】找樹根和孩子 //提交,未通過,明白了,孩子必須按字典序輸出 //修改,提交,AC 2017-12-13 18:54 //該題思路可以預計,與書中提供的程式碼很不相同,書中猜測用的是左子右兄表示法,日後驗證 //該題,本人思路,鄰接表,有向圖. //很明顯,水平上了一個臺階。 #i

資訊奧賽C++版第一部分 C++語言 第四章 迴圈結構的程式設計

第四章 迴圈結構的程式設計 第一節 for語句 T1059 : 求平均年齡 時間限制: 1000 ms 記憶體限制: 65536 KB 【題目描述】   班上有學生若干名,給出每名學生的年齡(整數),求班上所有學生的平均年齡,保留到小數點後兩位。 【輸入】

資訊奧賽C++版 第三部分 資料結構 第二章 佇列

//1334 【例2-3】圍圈報數//迴圈佇列,取模,數列空出一個空間//提交,未通過,執行超時//90分程式碼 #include <stdio.h>int q[10000];int main(){    int n,m,h,t,i,mod;    scanf("%d%d",&n,&

資訊奧賽C++版 第二部分 基礎演算法 第八章 廣度優先搜尋算

//1329 【例8.2】細胞//編寫過程中,發現輸入資料用整數無法讀取,要採用字串形式//核心思路,將非零數字字元改成0字元 //將程式碼修改,提交AC #include <stdio.h>int n,m,next[][2]={{1,0},{-1,0},{0,1},{0,-1}};char a[

資訊奧賽C++版 第二部分 基礎演算法 第一章 高精度計算

//1307 【例1.3】高精度乘法 //手動模擬乘法運算 //提交,測試點5,答案錯誤,猜測,應該是0的情況,沒考慮 //提供一組測試資料 //輸入: //123 //0 //輸出: //0 //考慮了0的情況,修改,提交AC 2017-11-9 //編到這裡,感覺高精度加是高精度演算法的基礎 #inc

資訊奧賽C++版 第一部分 C++語言 第四章 迴圈結構的程式設計

//1091 求階乘的和#include <stdio.h>int f(int n){    int i,ans=1;    for(i=1;i<=n;i++)        ans*=i;    return ans;}int main(){    int n,i,sum=0;    sc

資訊奧賽 小球drop

2018年資訊學奧賽NOIP資料下載 This drop is gonna last forever! 許多的小球一個一個的從一棵滿二叉樹上掉下來組成FBT(Full Binary Tree,滿二叉樹),每一時間,一個正在下降的球第一個訪問的是非葉子節點。然後繼續下降時,或者走右子樹,或

資訊奧賽演算法C++版基礎演算法:高精度計算 高精度加法(大位相加)

2018年資訊學奧賽NOIP資料下載 1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 char a1[100],b1[100]; 6 int a[100],b[100],c[100];/

資訊奧賽C++版 第二部分 基礎演算法 第四章 遞迴演算法

//1206 放蘋果 遞迴 //1192 放蘋果//http://www.cnblogs.com/dongsheng/archive/2012/08/15/2640468.html此文介紹得不錯,摘抄如下://8    解題分析://9         設f(m,n) 為m個蘋果,n個盤子的放法數目,則先對n

資訊奧賽C++版 網站補充題目

//1414 【2017NOIP普及組】成績 //樣例通過,提交AC 2017-12-31 21:45 #include <stdio.h> int main(){     int a,b,c;     scanf("%d%d%d",&a,&b,&c);     prin

資訊奧賽C++版第一部分 C++語言 第三章 程式的控制結構

第三章 程式的控制結構 第一節 if選擇結構 T1039 : 判斷數正負 【題目描述】   給定一個整數NNN,判斷其正負。如果N&gt;0N&gt;0N>0,輸出positive;如果N=0N=0N=0,輸出zero;如果N&lt

資訊奧賽C++版第二部分 基礎演算法 第二章 資料排序

第二章 資料排序 T1310 : 車廂重組 時間限制: 1000 ms 記憶體限制: 65536 KB 【題目描述】   在一箇舊式的火車站旁邊有一座橋,其橋面可以繞河中心的橋墩水平旋轉。一個車站的職工發現橋的長度最多能容納兩節車廂,如果將橋旋轉180180

資訊奧賽C++版 第三部分 資料結構 第四章 圖論演算法

 資訊學奧賽一本通(C++版) 第三部分 資料結構   第四章 圖論演算法 http://ybt.ssoier.cn:8088/ 第一節 圖的遍歷 //1341 【例題】一筆畫問題 //在想,是輸出尤拉路,還是歐拉回路 //從哪點開始遍歷, //點的資料範圍,邊的資料範圍

資訊奧賽 1143:最長最短單詞

1143:最長最短單詞 時間限制: 1000 ms         記憶體限制: 65536 KB 提交數: 2327     通過數: 703  【題目描述】