hdu3496-Watch The Movie二维费用DP
来源:互联网 发布:seo文章页面优化 编辑:程序博客网 时间:2024/04/30 04:56
原来的原来这是个二维费用的DP、、、、、好吧 又一次显现了我的无知
题意很明显,必须买m张时间在L之内看完的电影票,使其价值最大。
好吧,就解释下二维DP的思想吧
所谓的二维费用,就是对于同个物品有两个不同的费用,需要进行约束,一种约束可以用一维数组来实现,显然,二维可以解决二维费用((*^__^*) 嘻嘻……好像是废话呢)。
知道这个 代码就很好写了
然而的然而 ,这里有个需要注意的,题目要求必须买m张电影票,也就是说,第一维数组必须是满的,即初始化的时候必须是负无穷大(若找最小值,则是正无穷大)。
唉,第一次这样初始化二维数组,有点木讷,这里特意标明下。
OK,附上代码:
//long long 最大表示10^19#include <iostream>#include <algorithm>#include <string.h>using namespace std;#define max(a,b) (((a) > (b)) ? (a) : (b))#define Max 2147483648struct info{int T;int V;}N[101];int dp[105][1005];//记录i张票时间j可以买到的最大的价值int main(){int t;int i,j,k;cin>>t;while(t--){int n,m,l;cin>>n>>m>>l;//n场电影,必须买m场,最长花费l时间for(i=0;i<n;i++){cin>>N[i].T>>N[i].V;}//sort(N,N+n,cmp);//初始化memset(dp,0,sizeof(dp));for(i=1;i<=m;i++)for(j=0;j<=l;j++)dp[i][j]=-Max;for(i=0;i<n;i++){for(j=m;j>0;j--){for(k=l;k>=N[i].T;k--)dp[j][k]=max(dp[j][k],dp[j-1][k-N[i].T]+N[i].V);}}if(dp[m][l]<0) cout<<"0"<<endl;else cout<<dp[m][l]<<endl;}return 0;}
- hdu3496-Watch The Movie二维费用DP
- HDU3496 Watch The Movie(二维费用背包)
- HDU3496:Watch The Movie(二维01背包)
- hdu3496 Watch The Movie (二维背包)
- HDU3496:Watch The Movie(二维01背包)
- hdu3496 Watch The Movie(二维01背包)
- hdu3496 Watch The Movie
- HDU3496:Watch The Movie
- HDU3496-Watch The Movie
- 动态规划:HDU3496-Watch The Movie(二维费用的背包问题)
- 【hdu】 Watch The Movie 【二维费用背包】【dp初始化很重要】
- hdu3496 Watch The Movie(二维01背包)
- HDU3496:Watch The Movie(二维01背包)
- HU 3496 Watch The Movie---二维费用
- (DP,二维背包)Watch The Movie--HDOJ
- hdu 3496 Watch The Movie 二维费用背包
- hud 3496 Watch The Movie(二维费用背包)
- HDU 3496 Watch The Movie( 二维费用背包)
- 一篇好文网络相关
- 一维码,二维码,zxing
- Windows Phone开发(14):数据模板
- Memcache分布式部署方案
- va_start、va_end、va_list的使用
- hdu3496-Watch The Movie二维费用DP
- nil和 [NSNull null]区别
- cocos2d游戏开发工具大全
- Windows下的Memcache安装
- ASIHTTPRequest 详解, http 请求终结者
- 开始我的学习之路
- 10、J2SE基础-File类、RandomAccessFile类
- 八款开源 Android 游戏引擎 (巨好的资源)
- 制作文件系统的JFFS2镜像