SPOJ PIGBANK

来源:互联网 发布:scratch编程怎么下载 编辑:程序博客网 时间:2024/06/05 20:43
// http://www.spoj.com/problems/PIGBANK/#include<iostream>#include<algorithm>#include<cstring>using namespace std;#define Max 10000// dp(x) means the minimal value of conins with weight x.int dp[Max+1];// temp(x) means whether there is a solution to get minimal value of conins with weight x.bool temp[Max+1];// w(x) the weight of conin x// v(x) the value of conin xint w[500],v[500];int main(){    int T,E,F,N;    int i,j;    scanf("%d",&T);    while(T--)    {        scanf("%d%d%d",&E,&F,&N);        for(i=0;i<N;i++)        scanf("%d%d",&v[i],&w[i]);        memset(dp,0,sizeof(dp));        memset(temp,0,sizeof(temp));        temp[0]=true;        // variable i means the ith coin        for(i=0;i<N;i++)        {        // variable j means weight j, assuming the conin is ordered according to their weights.            for(j=w[i];j<=Max;j++)            {            dp(w) = min(f(w-wi))                            if(temp[j-w[i]]&&dp[j]!=0)                    {                // if:   weight of (j - w[i]) has a solution and weight of j already has a solution                // then: compare current solution and the solution by adding ith coin, choose the smaller one                    dp[j]=dp[j]<dp[j-w[i]]+v[i]? dp[j]:dp[j-w[i]]+v[i];                    temp[j]=true;                }                else if(temp[j-w[i]]&&dp[j]==0)               {               // if: weight of (j-w[i]) has a solution, and weight of j does not have a solution so far               // then: assign current solution by adding ith conin weight and value.                    dp[j]=dp[j-w[i]]+v[i];                    temp[j]=true;                }                cout << "dp[" << j << "]=" << dp[j] << endl;            }     }    if(temp[F-E]==false)    {       printf("This is impossible.\n");    }     else     {        printf("The minimum amount of money in the piggy-bank is %d.\n",dp[F-E]);     }   }   return 0;}

0 0
原创粉丝点击