zoukankan      html  css  js  c++  java
  • 算法分析第七次作业

    1. 问题

      有n个项目,m元钱,dp[x,y]表示第x个项目投资y元钱的效益,问如何投资使效益最大。

    2. 解析

       这其实是个很简单的问题,第x个项目投资y元,若当前投资额为m元,则他是从第x-1个项目投资额为m-y元转移过来

     则dp[x][y]//x表示第x个项目,y表示当前投资额

        Dp方程:dp[x][y]=max(dp[x][y],dp[x-1][y-t]+a[x][t]//x表示项目数,y表示投资额,t表示第x项目投资金额

    3. 设计

     

    for (int i = 1; i <= n; i++) {
    	for (int j = 0; j <= m; j++) {
    		dp[i][j] = 0;
    		for (int k = 0; k <= j; k++) {
    			if (dp[i][j] < a[i][k] + dp[i - 1][j - k]) {
    				dp[i][j] = a[i][k] + dp[i - 1][j - k];
    			}
    		}
    	}
    }
    

    4. 分析

      复杂度 O(n3)

    5. 源码

    https://github.com/Tinkerllt/algorithm-work.git

    #include<stdio.h>
    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #include<bitset>
    #include<set>
    #include<deque>
    #include<queue>
    #include<vector>
    //#include<unordered_map>
    #include<map>
    #include<stack>
    using namespace std;
    #define ll long long
    #define ull unsigned long long
    #define pii pair<int,int>
    #define Pii pair<ll,int>
    #define m_p make_pair
    #define l_b lower_bound
    #define u_b upper_bound 
    const int inf = 0x3f3f3f3f;
    const ll linf = 0x3f3f3f3f3f3f3f3f;
    const int maxn = 300 + 11;
    const int maxm = 600 + 11;
    const int mod = 1e9 + 7;
    const double eps = 1e-5;
    ll rd() { ll x = 0, f = 1; char ch = getchar(); while (ch<'0' || ch>'9') { if (ch == '-')f = -1; ch = getchar(); }while (ch >= '0'&&ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }return x * f; }
    inline ll qpow(ll a, ll b, ll p) { ll res = 1; while (b) { if (b & 1) { res *= a; res %= p; }b >>= 1; a = a * a%p; }return res; }
    inline ll gcd(ll a, ll b) { if (b == 0) return a; return gcd(b, a%b); }
    //iterator 
    //head
    //priority_queue
    int a[maxn][maxn], dp[maxn][maxn]; 
    int main() {
    	int n,m;
    	while (cin>>n>> m) {
    		for (int i = 1; i <= n; i++) {
    			a[i][0] = 0;
    			for (int j = 1; j <= m; j++)
    				scanf("%d", &a[i][j]);
    		}
    		for (int i = 1; i <= n; i++) {
    			for (int j = 0; j <= m; j++) {
    				dp[i][j] = 0;
    				for (int k = 0; k <= j; k++) {
    					if (dp[i][j] < a[i][k] + dp[i - 1][j - k]) {
    						dp[i][j] = a[i][k] + dp[i - 1][j - k];
    					}
    				}
    			}
    		}
    		printf("%d
    ", dp[n][m]);
    	}
    	return 0;
    }
    

     

  • 相关阅读:
    Jquery Validate验证是否为图片格式
    cosbench read异常解决办法。 Unable to verify integrity of data download. Client calculated content hash didn't match hash calculated by Amazon S3. The data may be corrupt.
    Ceph RGW 和 niginx 配置要点
    RGW/SWIFT对象存储性能测试工具--COSBench安装
    CEPH DAYS 2016 APAC ROADSHOW Ceph社区分享资料
    使用s3cmd操作ceph rgw
    gdb调试常用实用命令和core dump文件的生成
    What is GSLB
    转 ext文件系统及块组
    转 浅谈算法和数据结构: 十 平衡查找树之B树
  • 原文地址:https://www.cnblogs.com/tinkerx/p/12744915.html
Copyright © 2011-2022 走看看