Acdream 1110 True love(dp)

来源:互联网 发布:mac os 10.9.3 iso 编辑:程序博客网 时间:2024/05/29 18:45

类似于硬币问题的组成多少硬币,经典的NV优化问题。

#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>using namespace std;bool dp[100005];int num[100005];int a[105],b[105];int main(){    int n,i,j,m,sum,t,N;    double s;    scanf("%d",&t);    N=t;    while(t--)    {        scanf("%d%d",&n,&m);        for(i=0;i<n;i++)            scanf("%d",&a[i]);        for(i=0;i<n;i++)            scanf("%d",&b[i]);        memset(dp,0,sizeof(dp));        sum=0;        dp[0]=1;        for(i=0;i<n;i++)        {            memset(num,0,(m+1)*sizeof(num[0]));            for(j=a[i];j<=m;j++)            {                if(!dp[j]&&dp[j-a[i]]&&num[j-a[i]]<b[i])                {                    dp[j]=1;                    num[j]=num[j-a[i]]+1;                    sum++;                }            }        }        s=(double)sum/m;        printf("Case %d: %d\n",N-t,sum);    }    return 0;}


0 0