【DP】POJ 1252 完全背包

来源:互联网 发布:交大医学院网络英语 编辑:程序博客网 时间:2024/04/29 16:53

来回dp各一次。。

初始化dp=INF;

dp[0]=0;

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <string>#include <iostream>#include <algorithm>using namespace std;#include <queue>#include <stack>#include <vector>#include <deque>#include <set>#include <map>#define IN     freopen ("in.txt" , "r" , stdin);#define OUT  freopen ("out.txt" , "w" , stdout);typedef long long  LL;const int MAXN = 2222;//点数的最大值const int MAXM = 20006;//边数的最大值const int INF = 11521204;const int mod=1000000007;//struct node//{//    int s,e;//}//int main()//{//    int n,t;//    scanf("%d",&t);//    while(t--)//    {//        scanf("%d",&n);//        for(int i=0;i<n;i++)//        {//            scanf("%s",s);//            int len=strlen(s);//            edge[i].s=s[0];//            edge[i].e=s[len-1];//        }////    }//    return 0;//}int dp[MAXN];int main(){    int T;    int a[13]; //   IN;    scanf("%d",&T);    while(T--)    {        for(int i=0; i<=2000; i++)            dp[i]=INF;        for(int i=0; i<6; i++)            scanf("%d",&a[i]);        dp[0]=0;        for(int j=0; j<6; j++)            for(int i=a[j]; i<=1000; i++)//DP                    dp[i]=min(dp[i-a[j]]+1,dp[i]);        for(int j=0;j<6;j++)        {            for(int i=1000-a[j];i>=1;i--)                    dp[i]=min(dp[i+a[j]]+1,dp[i]);        }        int out=0;        float sum=0;        for(int i=1; i<=100; i++)//get ans        {            sum+=dp[i];            out=max(dp[i],out);        }        printf("%.2f %d\n",sum/100,out);    }    return 0;}


0 0
原创粉丝点击