分类目录归档:程序相关

C,Python,环境配置等

window.open窗口名称的问题

今日在一页面中需要点击查询按钮据下拉选择弹出不同的统计结果页面。即使用如下代码:

【代码一】

1
2
3
4
<script type="text/javascript">
window.open (url, ‘newwindow’, 'height=600, width=800, top=0, left=0, toolbar=no, menubar=no, 
scrollbars=yes, resizable=yes,location=no, status=no');
</script>

当多次点击按钮触发此事件时,无法选择哪种统计方式,显示的结果总是在一个页面打开,除非关闭这个页面才会重新打开页面。不懂,于是修改其各个参数。终于在改变了newwindow后才出现所要的效果(对于每种类别在不同的窗口中显示)。
【所得】

Window.open的第二个参数是用来标记当前页面的子窗口的,可以存在多个标记为空’’的子窗口,但是对于一个不为空的标记,只能存在一个此标记的窗口。如【代码一】所示,此代码在一个页面,即使是多次触发,也只会打开一个页面,就算是其它参数不同。
【简单示例】

1
2
3
4
5
<script type="text/javascript">
   var url = "index.html";
   window.open (url, 'name', 'height=600, width=800, top=0, left=0, toolbar=no, menubar=no, 
scrollbars=yes, resizable=yes,location=no, status=no');
</script>

附 参数详解【google所得】

【参数描述】

参数名 参数说明
url 弹出窗口的文件名
name 弹出窗口的名字(不是文件名),非必须,可用空”代替
height 窗口高度
width 窗口宽度
top 窗口距离屏幕上方的象素值
left 窗口距离屏幕左侧的象素值
toolbar 是否显示工具栏,yes为显示
menubar,scrollbars 表示菜单栏和滚动栏
resizable 是否允许改变窗口大小,yes为允许
location 是否显示地址栏,yes为允许
status 是否显示状态栏内的信息(通常是文件已经打开),yes为允许

积木城堡 

【问题描述】XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡。城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木。小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒。所以他在垒城堡的时候总是遵循这样的规则。

小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度。为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了获得更漂亮的城堡而引起争执。可是他发现自己在垒城堡的时候并没有预先考虑到这一点。所以他现在要改造城堡。由于他没有多余的积木了,他灵机一动,想出了一个巧妙的改造方案。他决定从每一个城堡中挪去一些积木,使得最终每座城堡都一样高。为了使他的城堡更雄伟,他觉得应该使最后的城堡都尽可能的高。

任务:

请你帮助小XC编一个程序,根据他垒的所有城堡的信息,决定应该移去哪些积木才能获得最佳的效果。

【输入格式 Input Format】
第一行是一个整数N(N<=100),表示一共有几座城堡。以下N行每行是一系列非负整数,用一个空格分隔,按从下往上的顺序依次给出一座城堡中所有积木的棱长。用-1结束。一座城堡中的积木不超过100块,每块积木的棱长不超过100。

【输出格式 Output Format】
一个整数,表示最后城堡的最大可能的高度。如果找不到合适的方案,则输出0。

【样例输入 Sample Input】
2
2 1 –1
3 2 1 –1

【样例输出 Sample Output】
3

【算法分析】
多次装箱

【代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdio.h>
#include <stdlib.h>
 
int a[101][10001], b[101];
int main()
{
       int n, i, j, k, max, min, m, flag, pp;
 
       scanf("%d", &n);
       memset(a, 0, sizeof(a));
 
       min = 100001;
       for (k = 1; k <= n; k++)
       {
              b[0] = 0;
              scanf("%d", &m);
              while (m != -1)
              {
                     b[++b[0]] = m;
                     scanf("%d", &m);
              }
 
              a[k][0] = 1;
              max = 0;
 
              for (i = 1; i <= b[0]; i++)
              {
                     for (j = max; j >= 0; j--)
                     {
                            if (a[k][j] == 1 && j + b[i] <= min)
                            {
                                   a[k][j + b[i]] = 1;
                                   if (j + b[i] > max)
                                          max = j + b[i];
                            }
                     }
              }
 
              if (max > min)
                     min = max;
 
       }
 
       flag = -1;
       for (i = min; i > 0; i--)
       {
              for (k = 1; k <= n; k++)
                     if (a[k][i] == 0)
                            break;
 
                     if (k > n)
                     {
                            flag = k;
                            max = i;
                            break;
                     }
       }
 
       if (flag == -1)
              printf("0\n");
       else
              printf("%d\n", max);
 
       return 0;
}

搭建双塔 

问题描述
  2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了这次灾难。为了纪念“9-11”事件,Mr. F决定自己用水晶来搭建一座双塔。

  Mr. F有N块水晶,每块水晶有一个高度,他想用这N块水晶搭建两座有同样高度的塔,使他们成为一座双塔,Mr. F可以从这N块水晶中任取M(1≤M≤N)块来搭建。但是他不知道能否使两座塔有同样的高度,也不知道如果能搭建成一座双塔,这座双塔的最大高度是多少。所以他来请你帮忙。

  给定水晶的数量N(1≤N≤100)和每块水晶的高度Hi(N块水晶高度的总和不超过2000),你的任务是判断Mr. F能否用这些水晶搭建成一座双塔(两座塔有同样的高度),如果能,则输出所能搭建的双塔的最大高度,否则输出“Impossible”。

输入格式 Input Format
  输入的第一行为一个数N,表示水晶的数量。第二行为N个数,第i个数表示第i个水晶的高度。

输出格式 Output Format
  输出仅包含一行,如果能搭成一座双塔,则输出双塔的最大高度,否则输出一个字符串“Impossible”。

样例输入 Sample Input
5
1 3 4 5 2

样例输出 Sample Output
7

算法分析
f[i,j]表示前i个分成差为j的两堆时的最大高度
f[i,j]=max{f[i-1,j],
     f[i-1,j+v[i]],
     f[i-1,j-v[i]]+v[i],(j-v[i]>=0)
     f[i-1,abs(j-v[i])]-abs(j-v[i])+v[i],(j-v[i]<0)} 答案就是f[n,0] 如果f[n,0]=0就impossible 【代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
#define max(a,b) (a>b ? a:b)
 
int main()
{
       int n, m = 0, i, j;
       int h[101];
       int dp[101][2001] = {0}; 
 
       scanf("%d",&n);
       for(i = 1; i <= n; i++)
       {
              scanf("%d", &h[i]);
              m += h[i];
       }
       for (i = 1; i <= n; i++)
              for (j = 0; j <= m; j++)
              {
                     dp[i][j] = dp[i-1][j];
                     if(j == h[i])
                            dp[i][j] = max(dp[i][j], dp[i - 1][j - h[i]] + h[i]);
 
                     if(j < h[i] && dp[i - 1][h[i] - j] -h[i] + j >= 0)
                            dp[i][j] = max(dp[i][j], dp[i - 1][h[i] - j] + j);
 
                     if(j > h[i] && dp[i - 1][j - h[i]] + h[i] - j >= 0)
                            dp[i][j] = max(dp[i][j], dp[i - 1][j - h[i]] + h[i]);
 
                     if(j + h[i] <= m)
                            dp[i][j] = max(dp[i][j], dp[i - 1][j + h[i]]);
              }
 
              if(dp[n][0])
                     printf("%d", dp[n][0]);
              else
                     printf("Impossible");   
 
              return 0;
}