码迷,mamicode.com
首页 > 其他好文 > 详细

拦截导弹 (NYOJ—79)

时间:2014-08-31 22:47:22      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   for   div   问题   代码   log   

这是到动态规划的题目,属于有顺序的0 1 背包问题;

代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int d[20][100000];  //d[i][j]
 5 int a[20];
 6 int N;
 7 
 8 int max(int a, int b)
 9 {
10     return a>b?a:b;
11 }
12 
13 int solve(int i,int high)
14 {
15     if(d[i][high]>=0)
16         return d[i][high];
17     if(i==N)
18     {
19         if(a[i]<high)
20             return d[N][high]=1;
21         else
22             return d[N][high]=0;
23     }
24     if(a[i]<high)
25         return d[i][high]=max(solve(i+1,a[i])+1,solve(i+1,high));          //打击和不打击  取大者
26     else
27         return d[i][high]=solve(i+1,high);
28 }
29 
30 int main()
31 {
32     int T;
33     scanf("%d",&T);
34     while(T--)
35     {
36         memset(d,-1,sizeof(d));
37         scanf("%d",&N);
38         for(int i=1; i<=N; i++)
39         {
40             scanf("%d",&a[i]);
41         }
42         printf("%d\n",solve(0,9999));
43     }
44     return 0;
45 }

但这个代码提交会得到RE,至于为什么可能是记忆话搜索对这个的复杂度减小的比较小,所以递归深度太深,造成堆栈溢出。

我想多了,不是这个原因,是我没有注意到下标越界了。

AC代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int d[22][1000];  //d[i][j]
 5 int a[22];
 6 int N;
 7 
 8 int max(int a, int b)
 9 {
10     return a>b?a:b;
11 }
12 
13 int solve(int i,int high)
14 {
15     if(d[i][high]>=0)
16         return d[i][high];
17     if(i==N)
18     {
19         if(a[i]<high)
20             return d[N][high]=1;
21         else
22             return d[N][high]=0;
23     }
24     if(a[i]<high)
25         return d[i][high]=max(solve(i+1,a[i])+1,solve(i+1,high));          //打击和不打击  取大者
26     else
27         return d[i][high]=solve(i+1,high);
28 }
29 
30 int main()
31 {
32     int T;
33     scanf("%d",&T);
34     while(T--)
35     {
36         memset(d,-1,sizeof(d));
37         scanf("%d",&N);
38         for(int i=1; i<=N; i++)
39         {
40             scanf("%d",&a[i]);
41         }
42         printf("%d\n",solve(1,999));
43     }
44     return 0;
45 }

 

拦截导弹 (NYOJ—79)

标签:style   blog   color   io   for   div   问题   代码   log   

原文地址:http://www.cnblogs.com/chaiwentao/p/3948308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!