HDU 3496 Watch The Movie
来源:互联网 发布:arcgis for js 编辑:程序博客网 时间:2024/05/16 01:54
题目链接~~>
做题感悟:开始做时感觉和FATE差不多,直接二维 01 背包写,但是必须要恰好选择 m 个这一点怎么也没想出怎么控制。
解题思路:二维 01 背包,但是要注意恰好选择 m 个 ,so ~ 初始化时要特别注意。
状态方程: dp [ i ][ j ] = max( dp[ i ][ j ] , dp [ i-1 ] [ j - v ] + w ) ;
代码:
#include<stdio.h>#include<iostream>#include<map>#include<stack>#include<string>#include<string.h>#include<stdlib.h>#include<math.h>#include<vector>#include<queue>#include<algorithm>using namespace std ;#define lld __int64const double PI = 3.1415926 ;const double esp = 1e-4 ;const int md= 2810778 ;const int INF = 99999999 ;const int MX = 1005 ;int n,m,C ;int dp[MX][MX] ;int main(){ int Tx ; scanf("%d",&Tx) ; while(Tx--) { int v,w ; scanf("%d%d%d",&n,&m,&C) ; for(int i=0 ;i<=m ;i++) // 除了dp[0][0] 点 都初始化为 -INF for(int j=0 ;j<=C ;j++) dp[i][j]=-INF ; dp[0][0]=0 ; for(int t=0 ;t<n ;t++) { scanf("%d%d",&v,&w) ; for(int i=m ;i>=1 ;i--) for(int j=C ;j>=v ;j--) if(dp[i][j]<dp[i-1][j-v]+w) dp[i][j]=dp[i-1][j-v]+w ; } int max=0 ; for(int i=0 ;i<=C ;i++) // 在选择 m 件的前提下选择价值最大的 if(dp[m][i]>max) max=dp[m][i] ; printf("%d\n",max) ; } return 0 ;}
0 0
- HDU 3496 - Watch The Movie
- HDU 3496 Watch The Movie
- Hdu 3496 Watch The Movie
- hdu 3496 Watch The Movie
- hdu 3496 Watch The Movie
- hdu 3496 Watch The Movie
- HDU 3496 Watch The Movie
- hdu 3496 Watch The Movie
- HDU--3496 Watch The Movie
- HDU 3496 Watch The Movie
- HDU 3496 Watch The Movie
- hdu 3496 Watch The Movie
- HDU 3496 Watch The Movie
- HDU 3496 Watch The Movie
- hdu 3496 Watch The Movie(二维背包)
- hdu 3496 Watch The Movie(DP)
- HDU 3496 Watch The Movie (二维背包)
- HDU 3496——Watch The Movie
- 东软睿道实训日记——第十一天
- 基于ARM含SD控制器的SD卡的SDIO模式驱动解析(转)
- Mysql 获得时间
- java开发webservice
- windows下远程链接linux
- HDU 3496 Watch The Movie
- 如何将一个正方形的view变为圆形
- 大数据分析书籍
- 中文分词API
- 心斋,樱宁,坐忘
- 可替换友盟的统计
- 韩沉船事件幸存者忆惊魂时刻:船就像在喝水
- 致自己——博客诞生记
- python ctypes中void**的表示