hdu 1260 Tickets(基础dp)

来源:互联网 发布:2016安卓版录音软件 编辑:程序博客网 时间:2024/05/16 14:32

题目链接:点击打开链接

题意:售票给k个人,每次售票时,可以单独售票给一个人,也可以售票给相邻的两个人。开始理解错了,以为可以一次售票给连续的多个人,原来题意说的是连续的两个人,所以是不能一次售票给大于两个人的。

错误代码:

#include <cstdio>#include <cstring>#include <iostream>using namespace std;int num[2005],adj[2005],dp[2005][2];//dp[i][0]:表示当前人单独购票,dp[i][1]:表示当前人和前一个人一块购票void print(int times){int hour=(8+times/3600)%24;int minute=(times%3600/60);int second=times%60;if(hour<=12){printf("%02d:%02d:%02d am\n",hour,minute,second);}else{printf("%02d:%02d:%02d pm\n",hour,minute,second);}}int main(){int t,k;scanf("%d",&t);while(t--){scanf("%d",&k);for(int i=0;i<k;i++){scanf("%d",&num[i]);}for(int i=1;i<k;i++){scanf("%d",&adj[i]);}dp[0][0]=num[0];dp[0][1]=num[0];for(int i=1;i<k;i++){dp[i][0]=min(dp[i-1][0],dp[i-1][1])+num[i];dp[i][1]=min(dp[i-1][0]-num[i-1]+adj[i],dp[i-1][1]+adj[i]);}print(min(dp[k-1][0],dp[k-1][1]));}return 0;}

正确代码:

#include <cstdio>#include <cstring>#include <iostream>using namespace std;int num[2005],adj[2005],dp[2005];void print(int times){int hour=(8+times/3600)%24;int minute=(times%3600/60);int second=times%60;if(hour<=12){printf("%02d:%02d:%02d am\n",hour,minute,second);}else{printf("%02d:%02d:%02d pm\n",hour,minute,second);}}int main(){int t,k;scanf("%d",&t);while(t--){scanf("%d",&k);for(int i=0;i<k;i++){scanf("%d",&num[i]);}for(int i=1;i<k;i++){scanf("%d",&adj[i]);}dp[0]=num[0];dp[1]=min(adj[1],dp[0]+num[1]);for(int i=2;i<k;i++){dp[i]=min(dp[i-1]+num[i],dp[i-2]+adj[i]);}print(dp[k-1]);}return 0;}

1 0
原创粉丝点击