zoukankan      html  css  js  c++  java
  • nyoj--747--蚂蚁的难题(三)(dp背包)

    蚂蚁的难题(三)

    时间限制:2000 ms  |  内存限制:65535 KB
    难度:4
    描述

    蚂蚁终于把尽可能多的食材都搬回家了,现在开始了大厨计划。

    已知一共有 件食材,每件食材有一个美味度 Ai 和新鲜度 Bi , 如果蚂蚁在第t时刻将第i样食材烹饪成功,则得到Ai-t*Bi 的美味指数,当然,用第i件食材做饭要花去 Ci 的时间。

    众所周知,蚂蚁的厨艺不怎么样,所以他需要你设计做饭方案使得在时间 内完成的美味指数最大。
    输入
    有多组测试数据。
    第一行是两个正整数,表示蚂蚁的做饭时间T和食材个数n。(n<=50, 1<=T<=100000)。
    接下来n行,每行有三个数,Ai,Bi,Ci。分别代表美味度、新鲜度和用该食材做饭花费的时间。(0<Ai,Bi,Ci<=100000).
    输出
    输出一个数字,表示最大美味指数
    样例输入
    6 1
    200 5 1
    样例输出
    195

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    struct zz
    {
    	int a;
    	int b;
    	int c;
    }q[110];
    int cmp(zz a,zz b)
    {
    	return a.b*b.c>a.c*b.b;//按时间消耗从快到慢排序 
    }
    int dp[100010];
    int main()
    {
    	int t,n,m,i,j;
    	while(scanf("%d%d",&t,&n)!=EOF)
    	{
    		for(i=0;i<n;i++)
    			scanf("%d%d%d",&q[i].a,&q[i].b,&q[i].c);
    		sort(q,q+n,cmp);
    		memset(dp,0,sizeof(dp));
    		int mm=0;
    		for(i=0;i<n;i++)
    		{
    			for(j=min(t,q[i].a/q[i].b);j>=q[i].c;j--)
    			{
    				dp[j]=max(dp[j],dp[j-q[i].c]+q[i].a-j*q[i].b);
    				mm=max(mm,dp[j]);
    			}
    		}
    		printf("%d
    ",mm);
    	}
    	return 0;
    }


  • 相关阅读:
    hdu 5101 Select
    hdu 5100 Chessboard
    cf B. I.O.U.
    cf C. Inna and Dima
    cf B. Inna and Nine
    cf C. Counting Kangaroos is Fun
    Radar Installation 贪心
    spfa模板
    Sequence
    棋盘问题
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273711.html
Copyright © 2011-2022 走看看