HDU 2602
来源:互联网 发布:如何在淘宝头条发文章 编辑:程序博客网 时间:2024/04/30 00:38
DP,基础简单背包问题。。。然后转移方程没错不知道wa在哪里。。。今晚吃齁了不想查。。。。。
*******************************************
用二维的今天早上仍旧不知道wa在哪里。改成一维的一下就跑过了。不懂为什么。然后就是其实每个数组都记录的是最优的状态。好像二维和一维的循环不大一样。再研究研究。
对的:
#include <stdio.h>#include <iostream>#include <cstring>using namespace std;#define maxn 1010int dp[maxn],val[maxn],cost[maxn];int main(){ int t; scanf("%d",&t); while(t--) { memset(dp,0,sizeof(dp)); int n,m,ans=0; scanf("%d%d",&n,&m); int i,j,k; for(i=1;i<=n;i++) scanf("%d",&val[i]); for(i=1;i<=n;i++) scanf("%d",&cost[i]); for(i=1;i<=n;i++) for(j=m;j>=cost[i];j--) { dp[j]=max(dp[j],dp[j-cost[i]]+val[i]); } //for(i=0;i<=m;i++) ans=max(ans,dp[i]); printf("%d\n",dp[m]); } return 0;}
错的:
#include <stdio.h>#include <string.h>#define maxn 1010#define ll __int64ll dp[maxn][maxn],val[maxn],cost[maxn];ll max(ll x,ll y){ if(x>y) return x; else return y;}int main(){ int t; scanf("%d",&t); while(t--) { ll n,m; ll ans=-1; memset(dp,0,sizeof(dp)); memset(cost,0,sizeof(cost)); memset(val,0,sizeof(val)); scanf("%I64d%I64d",&n,&m); int i,j,k; for(i=1;i<=n;i++) scanf("%I64d",&val[i]); for(i=1;i<=n;i++) scanf("%I64d",&cost[i]); for(i=1;i<=n;i++) for(j=m;j>=cost[i];j--) { dp[i][j]=max(dp[i][j],dp[i-1][j-cost[i]]+val[i]); if(i==n) ans=max(ans,dp[i][j]); } printf("%I64d\n",ans); } return 0;}
0 0
- HDU 2602
- HDU 2602
- HDU 2602
- HDU 2602
- hdu 2602
- hdu 2602
- hdu 2602
- HDU 2602
- HDU 2602
- hdu 2602
- HDU 2602
- hdu 2602
- HDU 2602
- HDU 2602
- HDU 2602
- HDU 2602
- hdu 2602
- HDU 2602
- linux软件开机自启动以及定时自动重启
- 连接字符串的网站
- LSA Functions - Privileges and Impersonation
- cat /proc/cpuinfo
- jdk的环境配置
- HDU 2602
- 进程间通信方式及比较
- hdu3074 线段树求区间乘积(单点更新)
- Redis命令总结
- oracle dblink详解
- 数据结构学习笔记(一)---汉诺塔
- LeetCode --- Binary Tree Postorder Traversal
- navicat for linux
- sleep 和wait 的区别