揹包DP FOJ 2214

題目:http://120.78.128.11/Problem.jsp?pid=2053

這題看起來是一題普通揹包題,但是你會發現相對價格來說,體積太大了,此時只要將體積看爲價格,價格看爲體積,然後再來一個普通的揹包DP算法就好了;

#include<stdio.h>
#include<algorithm>
using namespace std;
struct N
{
    int w, v;
}a[610];
int dp[5050];
int main( )
{
    int n, t, i, j, V, r;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d%d", &n, &V);
        for(i=r=0; i<n; i++)
            scanf("%d%d", &a[i].w, &a[i].v), r+=a[i].v;
        for(i=1; i<=r; i++)
            dp[i]=1e9;
        for(i=dp[0]=0; i<n; i++)
            for(j=r; j>=a[i].v; j--)
                dp[j]=min(dp[j], dp[j-a[i].v]+a[i].w);
        for(i=1, j=0; i<=r; i++)
            if(dp[i]<=V&&j<i)
                j=i;
        printf("%d\n", j);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章