CDOJ1323柱爷的下凡

C - 柱爷的下凡

Time Limit: 400/400MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
 

下凡的柱爷想只创造3种硬币,要求这3种硬币可以组成 [1,N] [1,N]的所有整数,并且表示一个 [1,N] [1,N]中的整数所用硬币的平均数量最少.

你能帮柱爷解决他的小小问题吗?

Input

第一行一个正整数 T T,表示测试组数.

接下来 T T行,每行一个正整数 N N.

数据保证:

  • 1T200 1≤T≤200

  • 1N200 1≤N≤200

Output

输出一共有 T T行,每行三个整数 A A  B B  C C表示柱爷希望的三种不同硬币的面值.如果有多组解,请保证A尽可能小,如果仍有多组解,请保证B尽量小,如果仍有多组解,请保证C尽量小.  A<B<C A<B<C

Sample input and output

Sample Input Sample Output
1
1
1 2 3
1
7
1 2 5

Hint

N=7 N=7

  • 1 1元,需要 1 1 1 1
  • 2 2元,需要 1 1 2 2
  • 3 3元,需要 1 1 1 1元和 1 1 2 2
  • 4 4元,需要 2 2 2 2
  • 5 5元,需要 1 1 5 5
  • 6 6元,需要 1 1 1 1元和 1 1 5 5
  • 7 7元,需要 1 1 2 2元和 1 1 5 5
  • 平均需要约 1.57


function testmain1
close all
T = 14560000;
T = 0.8*T;
%北京市总人口(Total Population)
%1456.00万人(2003年)
%已确诊病例累计  现有疑似病例  死亡累计  治愈出院累计
d=[339  402  18  33
482  610  25  43
588  666  28  46
693  782  35  55
774  863  39  64
877  954  42  73
988  1093  48  76
1114  1255  56  78
1199  1275  59   78
1347  1358  66  83
1440  1408  75  90
1553  1415  82  100
1636  1468  91  109
1741  1493  96  115
1803  1537  100  118
1897  1510  103  121
1960  1523  107  134
2049  1514  110  141
2136  1486  112  152
2177  1425  114  168
2227  1397  116  175
2265  1411  120  186
2304  1378  129  208
2347  1338  134  244
2370  1308  139  252
2388  1317  140  257
2405  1265  141  273
2420  1250  145  307
2434  1250  147  332
2437  1249  150  349
2444  1225  154  395
2444  1221  156  447
2456  1205  158  528
2465  1179  160  582
2490  1134  163  667
2499  1105  167  704
2504  1069  168  747
2512  1005  172  828
2514  941  175  866
2517  803  176  928
2520  760  177  1006
2521  747  181  1087
2522  739  181  1124
2522  734  181  1157
2522  724  181  1189
2522  718  181  1263
2522  716  181  1321
2522  713  183  1403
2523  668  183  1446
2522  550  184  1543
2522  451  184  1653
2522  351  186  1747
2523  257  186  1821
2523  155  187  1876
2522  71  187  1944
2522  4  189  1994
2522  3  189  2015
2521  3  190  2053
2521  5  190  2120
2521  4  191  2154
2521  3  191  2171
2521  3  191  2189
2521  2  191  2231
2521  2  191  2257
2521  2  191  2277];
S = T - d(:,1)-d(:,3)-d(:,4);

I = d(:,1)+d(:,2); % 感染人数
S1 = d(:,2); % 现有疑似病例
R = d(:,3)+d(:,4);
t = (1:length(I))';
subplot(1,2,1);
h=plot(t,I,'o-',t,S1,'*');
legend(h,'I','S')

xdata = [I(1:end-1) S(1:end-1)]
ydata = diff(I)./diff(t)
%ydata = ydata((1:30),:);


coef = lsqcurvefit(@ffun,[1 1],xdata,ydata)
format long
k = coef(1)
h = coef(2)
%z=kIS-hI
% lsqcurvefit xdata(:,1) -> I, xdata(:,2)->S
[T,Y]=ode23(@dfun,[0:60],[S(1) I(1) R(1)]);
%Y(:,2) 为I的数值解
subplot(1,2,2);
%plot(xdata,ydata,'ro',xdata,ffun(coef,xdata),'k*');
plot(t,I,'ro',T',Y(:,2)','k*')


function ydata=ffun(coef,xdata)
k = coef(1); h = coef(2);
ydata = k*xdata(:,1).*xdata(:,2)-h*xdata(:,1);


function dy=dfun(t,y) %y (1)-->S, y(2)-->I
dy = zeros(2,1); S=y(1);  I = y(2); R=y(3);
k = 1.738382084343759e-05;
h = 0.004435622880419;
dy(1) = -k.*I.*S;
dy(2)=k.*I.*S-h.*I;
dy(3)=h.*I;





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值