hihocoder 1285 智力競賽 (類多重揹包)
時間限制:5000ms
單點時限:1000ms
記憶體限制:256MB
描述
小Hi、小Ho還有被小Hi強拉來的小Z,準備組隊參加一個智力競賽。競賽採用過關制,共計N個關卡。在第i個關卡中,小Hi他們需要獲得Ai點分數才能夠進入下一關。每一關的分數都是獨立計算的,即使在一關當中獲得超過需要的分數,也不會對後面的關卡產生影響。
小Hi他們可以通過答題獲得分數。答對一道題獲得S點分數,答錯一道題獲得T點分數。在所有的N個關卡中,小Hi他們一共有M次答題機會。在每個關卡中,都可以在累計答題次數不超過M的情況下使用任意次的答題機會。
那麼現在問題來了,對於給定的N、M、S、T和A,小Hi他們至少需要答對多少道題目才能夠完成所有的關卡呢?
輸入
每個輸入檔案包含多組測試資料,在每個輸入檔案的第一行為一個整數Q,表示測試資料的組數。
每組測試資料的第一行為四個正整數N、M、S和T,意義如前文所述。
第二行為N個正整數,分別表示A1~AN。
對於40%的資料,滿足1<=N,M<=100
對於100%的資料,滿足1<=N,M<=1000,1<=T<S<=10,1<=Ai<=50
對於100%的資料,滿足1<=Q<=100
輸出
對於每組測試資料,如果小Hi他們能夠順利完成關卡,則輸出一個整數Ans,表示小Hi他們至少需要答對的題目數量,否則輸出No。
1
2 10 9 1
12 35
樣例輸出
5
題目連結:http://hihocoder.com/problemset/problem/1285
題目分析:dp[i][j]表示到第i個關卡,回答了j題,答對的題目數,列舉每個關卡可能答對問題的次數和必須答錯的次數,然後直接dp出到第i個關卡且在第i個關卡答對k題答錯p題所答對的最小題,dp[n][j]最小就是過了n關,答了j次所答對的最少題數
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int const INF = 0x3fffffff;
int const MAX = 1005;
int dp[MAX][MAX];
int a[MAX];
int main()
{
int T;
scanf("%d", &T);
while(T --)
{
int n, m, s, t;
scanf("%d %d %d %d", &n, &m, &s, &t);
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
for(int i = 0; i <= n; i++)
for(int j = 0; j <= m; j++)
dp[i][j] = INF;
dp[0][0] = 0;
for(int i = 1; i <= n; i++)
{
for(int j = 0; j <= m; j++)
{
for(int k = a[i] / s + (a[i] % s != 0); k >= 0; k--)
{
int rem = a[i] - k * s, p = 0;
if(rem > 0)
p = rem / t + (rem % t != 0);
if(j >= k + p && dp[i - 1][j - k - p] < INF)
dp[i][j] = min(dp[i][j], dp[i - 1][j - k - p] + k);
}
}
}
int ans = INF;
for(int j = 0; j <= m; j++)
ans = min(ans, dp[n][j]);
if(ans == INF)
printf("No\n");
else
printf("%d\n", ans);
}
}
相關文章
- 01揹包、完全揹包、多重揹包詳解
- javascript演算法基礎之01揹包,完全揹包,多重揹包實現JavaScript演算法
- [Offer收割]程式設計練習賽1 hihocoder 1270 建造基地 (完全揹包)程式設計
- 【BZOJ 5003】與鏈 (多重揹包 dp)
- 多重揹包二進位制分解思想講解
- 智力競賽搶答器的設計與除錯除錯
- 多重揹包動態規劃及空間優化動態規劃優化
- 多重揹包問題的單調佇列優化佇列優化
- POJ1276Cash Machine[多重揹包可行性]Mac
- 動態規劃-揹包類動態規劃
- Codeforces 148E Porcelain (預處理+多重揹包)AI
- 揹包問題(01揹包與完全揹包)
- 揹包DP——完全揹包
- 揹包DP——混合揹包
- hdu5445 || 2015長春網路賽1009題 多重揹包問題
- 分組揹包、完全揹包
- NOIP2012pj擺花[DP 多重揹包方案數]
- 揹包
- 01揹包、有依賴的揹包
- poj1276 多重揹包問題(二進位制解決方案)
- 多重揹包O(N*V)演算法詳解(使用單調佇列)演算法佇列
- codevs 3372 選學霸(hash+並查集+多重揹包)dev並查集
- 01 揹包
- 揹包DP
- HDU1285確定比賽名次(拓撲排序)排序
- 揹包問題
- 【CSDN競賽第八期】贏CSDN定製揹包和副總裁親筆簽名實體書!
- 中國大學生數學競賽(非數學專業類)競賽大綱
- 程式碼隨想錄演算法訓練營第四十六天| 139.單詞拆分 多重揹包 揹包問題總結篇!演算法
- ACM 揹包問題ACM
- 01揹包問題
- dp-完全揹包
- 通天之分組揹包
- Codeforces Round #360 (Div. 2) E dp 類似01揹包
- 01 揹包的變形
- 揹包問題大合集
- 揹包題型總結
- 從【零錢兌換】問題看01揹包和完全揹包問題