hihocoder 1285 智力競賽 (類多重揹包)

_TCgogogo_發表於2016-03-28
時間限制: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);
    }
}


相關文章