博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4293 Groups (线性dp)
阅读量:6573 次
发布时间:2019-06-24

本文共 855 字,大约阅读时间需要 2 分钟。

OJ题目:

题目分析:n个人分为若干组 , 每一个人描写叙述其所在的组前面的人数和后面的人数。求这n个描写叙述中,最多正确的个数。

设dp[ i ] 为前i个人的描写叙述中最多正确的个数,则dp[ n ] 为要求的。num[ i ][ j ]  保存说前面有i个人 , 后面有j个人的人数,显然num[ i ][ j ]不超过n - i - j;

转移方程dp[ i ] = max(dp[ i ] , dp[ j ]  + num[ j ][ n - i ])  ,详解见代码凝视。

AC_CODE

int num[502][502];int dp[502];int main(){    //freopen("in.txt","r",stdin);    int n;    while(cin >> n){        memset(num , 0 , sizeof(num));        memset(dp , 0 , sizeof(dp));        int i , j , a , b;        for(i = 1;i <= n;i++){            scanf("%d%d",&a,&b);            if(a+b < n && num[a][b] < (n - a - b)) num[a][b]++;        }        for(i = 1;i <= n;i++)//对于第i个人            for(j = 0;j < i;j++)//他可能表述为前面有j个人,j在[0 i-1],所以是dp[j] + num[j][]            dp[i] = max(dp[i] , dp[j] + num[j][n-i]);//为什么num的二维表示成[n-i]?这样能够保证2个for下来遍历全部该遍历的num[i][j]!!!        cout << dp[n] << endl;    }    return 0;}

转载地址:http://dtgjo.baihongyu.com/

你可能感兴趣的文章
Java并发编程、内存模型与Volatile
查看>>
小白学jquery Mobile《构建跨平台APP:jQuery Mobile移动应用实战》连载结束
查看>>
php SSL certificate problem: unable to get local issuer certificate
查看>>
JavaScript学习复习
查看>>
python 使用scapy编写DNS Fuzzer
查看>>
网站平台架构演变史(五) - 总结
查看>>
蓝牙4.0BLE cc2540 usb-dongle的 SmartRF Packet Sniffer 抓取数据方法 【原创,多图】
查看>>
.Net Core学习地址
查看>>
iOS xcode6最新提交app方法
查看>>
spark运行wordcount程序
查看>>
树莓派UFW防火墙简单设置
查看>>
SparkStreaming+Kafka 处理实时WIFI数据
查看>>
Resin
查看>>
MapReduce(十六): 写数据到HDFS的源代码分析
查看>>
leetcode第一刷_Reverse Linked List II
查看>>
EF6+Sqlite连接字符串的动态设置
查看>>
android动画-拖动
查看>>
Hive总结(五)hive日志
查看>>
PHP批量去除bom头代码的小工具
查看>>
【计算机视觉】基于Kalman滤波器的进行物体的跟踪
查看>>