zoukankan      html  css  js  c++  java
  • 洛谷 P2983 [USACO10FEB]购买巧克力Chocolate Buying

    购买巧克力Chocolate Buying

    乍一看以为是背包,然后交了一个感觉没错的背包上去。
    
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    //Mystery_Sky
    //
    #define M 10000000
    #define ll long long
    ll f[M];
    ll p[M], num[M], sum;
    ll n, v;
    int main() {
    	scanf("%lld%lld", &n, &v);
    	for(int i = 1; i <= n; i++) scanf("%lld%lld", &p[i], &num[i]);
    	for(int i = 1; i <= n; i++) {
    		for(ll k = 1; k <= num[i]; k++) {
    			for(ll j = v; j >= p[i]; j--) {
    				f[j] = max(f[j], f[j-p[i]]+1);
    			}
    		}
    	} 
    	printf("%lld
    ", f[v]);
    	return 0;
    }
    
    结果无情30分。
    

    看了一下数据范围,再仔细想了下,发现不是dp,贪心就可以了,从小到大排序费用,再从小到大买,到买不起为止即可。
    

    Code:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    //Mystery_Sky
    //
    #define ll long long
    #define M 1000000
    struct node {https://i.cnblogs.com/EditCategories.aspx?catid=1
    	ll p, c;
    }m[M];
    ll ans, b;
    int n;
    inline bool cmp(node a, node b)
    {
    	return a.p < b.p;
    }
    
    int main() {
    	scanf("%d %lld", &n, &b);
    	for(int i = 1; i <= n; i++) scanf("%lld%lld", &m[i].p, &m[i].c);
    	sort(m+1, m+1+n, cmp);
    	for(int i = 1; i <= n; i++) {
    		if(b / m[i].p >=  m[i].c) {
    			ans += m[i].c;
    			b -= m[i].p * m[i].c;
    		}
    		else {
    			ans += b / m[i].p;
    			break;
    		}
    	}
    	printf("%lld
    ", ans);
    	return 0;
    }
    
    唯愿,青春不辜负梦想,未来星辰闪耀
  • 相关阅读:
    AcWing 276. I-区域
    学习笔记:可持久化线段树(主席树):静态 + 动态
    NOIP2016提高组 天天爱跑步
    AcWing 195. 骑士精神
    标准文档流
    css 盒模型
    css 继承性和层叠性
    css 选择器
    css 引入方式
    html body中的标签2
  • 原文地址:https://www.cnblogs.com/Benjamin-cpp/p/10994857.html
Copyright © 2011-2022 走看看