zoukankan      html  css  js  c++  java
  • 广州集训 Day3-4(Homework)

    //由于时间关系(我太弱了),这些题目的Solution要等到NOIP 结束后再来填(可能最近刷题会填一些吧...

    //假装填了几题DP

    Day 3

      // 图论

    BZOJ2330

    POJ1236

    POJ3648 

    POJ1511

    POJ1797

    POJ1062

    BZOJ1821

    POJ2728

    BZOJ4078 

    Day4

      //DP

    (下面是讲义里的题目)

    UVA 12212:数位翻转 

    SGU 134:中心

    SGU 223:棋盘上的王

    Poj2764:糖果

    CF 279C:阶梯数列

    HDU 2929:火柴

    ZOJ 3349:特殊数列

    CF506A:收集金币

    POJ 3420:骨牌覆盖

    POJ 3613:K边路

    ZOJ 3031:捡垃圾

    HDU 3156:圆覆盖

    POJ 3418:二次函数 

    UVALive 5971: 排列计数

    LA 5092:欧拉数

    Tsinsen D7026:路径方案

    Homework

    http://west14.openjudge.cn/20170809/

    以下是该网页的Solutioin:

    http://west14.openjudge.cn/20170809/01/

    Solution:

      DP。

      由于在固定的时间内考虑要与不要,而先采与后采没有区别,我们考虑DP。

      采摘当前的价值高还是之前的高,取Max即可。

     1 #include<cstdio>
     2 #include<cstring>
     3 #define MAXN 105
     4 #define MAXT 1005
     5 using namespace std;
     6 int t,mm;
     7 int dp[MAXN][MAXT];
     8 struct Node{
     9     int t,v;
    10 };
    11 Node m[MAXN];
    12 inline int Max(int a,int b){return a>b?a:b;}
    13 int main(){
    14     memset(dp,0,sizeof(dp)); 
    15     scanf("%d%d",&t,&mm);
    16     for(int i=1;i<=mm;i++) scanf("%d%d",&m[i].t,&m[i].v);
    17     for(int i=1;i<=mm;i++) 
    18         for(int j=1;j<=t;j++) {
    19             if(j<m[i].t) dp[i][j]=dp[i-1][j];
    20             else dp[i][j]=Max(dp[i-1][j],dp[i-1][j-m[i].t]+m[i].v);
    21         }
    22     printf("%d",dp[mm][t]);
    23     return 0;
    24 }
    01

    http://west14.openjudge.cn/20170809/02/

    Solution:

      LIS。

      用一个dp[i]来记录当前位置的最长上升长度,考虑要不要加入当前的值,对当前和之前取Max即可。

      时间复杂度O(n^2)。

      // 该网站第十题是一个O(nlogn)的LIS。

     1 #include<cstdio>
     2 #define MAXN 1005
     3 using namespace std;
     4 int n,ans=0,dp[MAXN],a[MAXN];
     5 inline int Max(int a,int b){return a>b?a:b;}
     6 int main(){
     7     scanf("%d",&n);
     8     for(int i=1;i<=n;i++) scanf("%d",&a[i]),dp[i]=1;
     9     for(int i=1;i<=n;i++) 
    10         for(int j=1;j<=i;j++) {        
    11             if(a[i]>a[j]) dp[i]=Max(dp[j]+1,dp[i]);
    12             ans=Max(ans,dp[i]);
    13         }
    14     printf("%d",ans);
    15     return 0;
    16 }
    02
  • 相关阅读:
    将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据
    DataTable和List集合互转
    Sql2008中使用DataTable作为存储过程的参数
    jquery实现很简单的DIV拖动
    //禁用右键、文本选择功能、复制按键
    jquery---点击弹出层
    读取xml字符串
    mogodb安装,复制,副本集
    windows服务器安装zabbix客户端
    系统初始化脚本(Centos7.2)
  • 原文地址:https://www.cnblogs.com/drizzly/p/7683384.html
Copyright © 2011-2022 走看看