(資訊學奧賽一本通 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>0N>0N>0,輸出positive;如果N=0N=0N=0,輸出zero;如果N<
資訊學奧賽一本通(C++版)第二部分 基礎演算法 第二章 資料排序
第二章 資料排序 T1310 : 車廂重組 時間限制: 1000 ms 記憶體限制: 65536 KB 【題目描述】 在一箇舊式的火車站旁邊有一座橋,其橋面可以繞河中心的橋墩水平旋轉。一個車站的職工發現橋的長度最多能容納兩節車廂,如果將橋旋轉180180
資訊學奧賽一本通(C++版) 第三部分 資料結構 第四章 圖論演算法
資訊學奧賽一本通(C++版) 第三部分 資料結構 第四章 圖論演算法 http://ybt.ssoier.cn:8088/ 第一節 圖的遍歷 //1341 【例題】一筆畫問題 //在想,是輸出尤拉路,還是歐拉回路 //從哪點開始遍歷, //點的資料範圍,邊的資料範圍
資訊學奧賽一本通 1143:最長最短單詞
1143:最長最短單詞 時間限制: 1000 ms 記憶體限制: 65536 KB 提交數: 2327 通過數: 703 【題目描述】