zoukankan      html  css  js  c++  java
  • 【解题报告】[动态规划]RQNOJ PID2 / 开心的金明

    原题地址:http://www.rqnoj.cn/problem/2

    解题思路:背包问题。

    状态转移方程:DP[i][j]=max(DP[i-v[j]][j-1]+p[j]*v[j],DP[i][j-1])

    DP[i][j]表示最多话费i的钱,购买前j+1个物品所能达到的最大价值。

    解题代码:

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<algorithm>
     4 using namespace std;
     5 int DP[30005][25];
     6 int v[25];
     7 int p[25];
     8 int main()
     9 {
    10     int n,m,i,j;
    11     scanf("%d%d",&n,&m);
    12     for(i=0;i<m;i++)
    13     {
    14         scanf("%d%d",&v[i],&p[i]);
    15     }
    16     for(i=0;i<=n;i++)
    17     {
    18         if(i>=v[0]) DP[i][0]=v[0]*p[0];
    19         else DP[i][0]=0;
    20     }
    21     for(j=1;j<m;j++)
    22     {
    23         for(i=0;i<=n;i++)
    24         {
    25             if(i>=v[j]) DP[i][j]=max(DP[i-v[j]][j-1]+p[j]*v[j],DP[i][j-1]);
    26             else DP[i][j]=DP[i][j-1];
    27             //if(DP[i][j]>=3900) {printf("dp[%d][%d]=%d
    ",i,j,DP[i][j]);getchar();}
    28         }
    29     }
    30     printf("%d
    ",DP[n][m-1]);
    31     return 0;
    32 }
    View Code
  • 相关阅读:
    决策树
    交叉熵与softmax
    集成学习
    SVM算法
    蒙特卡罗方法
    K近邻--KNN
    K-Means聚类
    DBSCAN密度聚类
    Bagging、随机森林
    支持向量机SVM
  • 原文地址:https://www.cnblogs.com/syiml/p/3695036.html
Copyright © 2011-2022 走看看